一.字符编码
1.字符编码简介
1)字符编码只针对文本数据
2)计算机内部存储数据的本质是二进制,也就是计算机只认识0和1的二进制
3)之所以我们打出来的字可以被计算机识别是因为中间有一层转换关系:字符编码表
2.字符编码发展的三个阶段
阶段一:一家独大
由于计算机是美国人发明的,为了让计算机可以识别英文所以发明了ASCII码。ASCII码中记录了英文字母跟数字的对应关系。
用1字节来表示一个英文字符
A~Z 65~90
a~z 97~122
阶段二:群雄割据
各国有了自己的字符编码:
中国:GBK码,记录中文、英文与数字的对应关系
两个字节存储一个字符
日本:shift_JIS码,记录日文、英文与数字的对应关系
韩国:Euc_kr码,记录韩文、英文与数字的对应关系
PS:此时各个国家之间编码不一致,不同数据无法直接交互会出现乱码!
阶段三:天下一统
万国码(unicode):兼容多个国家语言与数字的对应关系。但是所有字符都是采用2字节来表示一个字符!
后来utf家族发布了优化版:utf8。英文采用1字节,中文3字节
PS:内存使用unicode,硬盘采用utf8
3.字符编码相关操作
只有字符串可以参与编码解码,其他数据类型需要先转换成字符串才可以
1)解决乱码的措施
1.当初用什么编码存的就用什么编码解码
2.一个一个切换尝试
2)编码与解码
【编码】:人类字符>>计算机字符
将人类字符按照指定的编码编成计算机可以识别的数字
#encode()编码
s1 = '张三'
res = s1.encode('utf8')
print(res)
#结果为:b'\xe5\xbc\xa0\xe4\xb8\x89'
【解码】:计算机字符>>人类字符
将计算机可以识别的数字按照指定的编码解成人类字符
#decode()解码
res1 = res.decode('utf8')
print(res1)
#结果为:张三
3)不同版本解释器的区别
python2默认的编码是ASCII,如果想用utf8则需要:
1.文件最开头输入:#encoding:utf8
2.每一个字符串前面都要加u: print u'你好你好你好'
python3默认的编码是utf8