一、基本概念
1.计算机内部存储的数据都是以二进制数字的形式
计算机基于电信号工作,而电信号只有高低电频两种形态,也就意味着计算机的世界只能识别两种形态,人为将高电频定义为数字1,低电频定义为数字0.
2.单位换算:
比特位bit(二进制数的个数)
8bit = 1bytes(字节)
1024bytes = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
'''字符编码的研究仅限于文本文件'''
3.字符编码表
人类使用计算机输入字符的时候电脑展示人类能看懂的符,而计算机内部只能识别01的二进制,这时候人类的字符与计算机之间要有一个设定好的对应关系,这种规定人类字符和数字之间的对应关系就是字符编码表
二、发展史
1.一家独大
计算机由美国人发明的,美国人让计算机能够识别英文,发明了ASCLL码(字符编码表),记录了英文与数字之间的对应关系。
1bytes来表示所有的英文及符号。1bytes = 8bit,256个数字
# 所有的英文字母机符号加起来其实也不超过128种可能
2.群雄割据
# 中国
中国人为了计算机能够识别中文发明了GBK码,记录了中文、英文与数字的对应关系
2bytes来表示中文及符号,2bytes=16bit ,65535个数字
1bytes来表示所有的英文及符号
# 生僻字可能会使用更多的bytes来表示
# 日本
日本人为了计算机能识别日文发明了shift_JIS码,记录了日文、英文与数字的对应关系 ,1bytes来表示所有的英文及符号
# 韩国
韩国人为了计算机能识别韩文发明了Euc_kr码,记录了韩文、英文与数字的对应关系,1bytes来表示所有的英文及符号
3.天下一统
群雄割据导致数据交互不通畅,会出现乱码现象,这便诞生了unicode万国码兼容万国字符,所有的字符同意使用2bytes表示,不够增加更多bytes。
UTF-8(unicode transformation format)是unicode的实现方式之一,UTF-8是它是一种变长的编码方式,英文还是用1bytes,中文改用3bytes
# 内存使用的编码表是unicode 硬盘使用的是utf8
'''需要记住文本文件编码统一使用utf8即可'''
三、实操
1.解决文件乱码的核心
文件以什么编码存的就以什么编码取
2.编码与解码
# 编码 encode()
res = 'hello 世界'
ret = res.encode('gbk')
print(ret,type(ret))
...
out
b'hello \xca\xc0\xbd\xe7' <class 'bytes'>
# 解码 decode()
ret1 = ret.decode('utf-8') # 报错,用什么编码存,就用什么编码解
ret1 = ret.decode('gbk')
print(ret1)
...
out
hello 世界
3.python解释器默认编码
python2默认的是ASCII码
在python2中定义字符串在前面加一个字母u
# -*- conding:utf8 -*- #文件头指定编码
name = u'hello world'
python3默认的是utf8码