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