字符编码
字符编码
一. 什么是字符编码
计算机内部只识别二进制 但是用户在使用计算机的时候却可以看到各式各样的语言字符
字符编码:内部记录了人类字符与数字对应关系的数据
只跟文本文件和字符串有关 与视频文件 图片文件等无关
二.字符编码发展史
- 一家独大
计算机最初是由美国人发明的 美国人为了能够让计算机识别英文字符
ASCII码:里面记录了英文字符与数字的对应关系
用一个字节来是对应关系
ps:所有的英文字符和符号加起来其实不超过127,之所以使用八位是为了后续发现新的语言
必须记住的对应关系有以下两组:
0是48 A-Z:65-90 a-z:97-122
- 群雄割据
中国人为了能够让计算机识别中文 我们需要发明另外一套编码表
GBK码:记录了英文中文与数字的对应关系,对于英文还是使用一个字节,对应中文使用两个字节甚至更多字节
ps:两个字节其实也不够表示出所有的中文,遇到生僻字可能需要更多位来表示
日本人为了能够让计算机识别日文 也需要发明一套编码表,shift_JIS码:记录了日文英文与数字的对应关系
韩国人为了能够让计算机识别韩文 也需要发明一套编码表,Euc_kr码:记录了韩文英文与数字的对应关系
- 天下一统
为了能够实现不同国家之间的文本数据能够彼此无障碍交流需要对编码统一
unicode(万国码) :统一使用两个及以上字符记录字符与数字的对应关系
utf8(万国码的优化版本):将英文还是用一个字节存储,将中文使用三个字节或更多字节存储
ps:现在默认使用的编码是utf8
三.字符编码实操
1.如何解决文件乱码的情况
文件当初以什么编码编的 打开的时候就以什么编码解
2.python解释器版本不同带来的编码差异
python2.X内部使用的编码默认是ASCII
文件头加coding:utf8,在python2中定义字符串前面要加一个小u
s = u'你' python3.X内部使用utf8
3.编码与解码
编码
将人类能够读懂的字符按照指定的编码转换成数字
解码
将数字按照指定的编码转换成人类能够读懂的字符
s = '每天不要想太多 学就完事了 干就完了 奥利给!!!'
# 编码
res = s.encode('utf8')
print(res, type(res)) # bytes 在python中直接将该类型看成二进制数据即可
# 解码
res1 = res.decode('utf8')
print(res1)
# 必须是相同的编码才可以