字符编码
字符编码针对的是文字,只跟文本文件有关
文本编辑器的输入输出是两个过程
内存 >>> 硬盘
硬盘 >>> 内存
人在操作计算机的时候输入的是人类能看懂的字符,但计算只能识别二进制数据:
输入的字符 >>>(字符编码表)>>> 二进制数字
ASCII码表:
用八位二进制表示一个字符 0000 0000 ;1111 1111
GBK:
用2Bytes表示一个中文字符,1Bytes表示一个英文字符 0000 0000 0000 0000;1111 1111 1111 1111 ,最多有65535个字符
万国码 unicode
统一用2Bytes表示所有字符
1.浪费存储空间
2.io次数增加,程序运行效率低
3.当内存中的unicode编码格式数据存到硬盘的时候,会按照utf-8编码
会将unicode的英文字符由原来的2Bytes变成1Bytes
会将unicode中文字符由原来的2Bytes变成3Bytes
ps:现在的计算机内存都是 unicode,硬盘都是utf-8
(需要掌握的)
unicode的两个特点
1.用户在输入的时候,无论输什么字符都能够兼容万国字符
2.其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系
(必须掌握的)
数据由内存保存到硬盘
1.内存中的unicode格式二进制数字 >>>>编码(encode)>>>>> utf-8格式的二进制数据
硬盘中的数据由硬盘读到内存
1.硬盘中的utf-8格式的二进制数据 >>>>>解码(decode)>>>>> 内存中unicode格式的二进制数据
ps:不乱码:文本文件以什么编码的就以什么解码
python2 将py文件读入解释器默认ASCII
在用python2解释器开发的时候,中文前会加‘u’,表示用unicode
python3 将文本文件读入解释器默认utf-8
python3 中字符串默认就是unicode编码格式的二进制数
重点(*****):
x = '上'
res1 = x.encode('gbk') # 将unicode编码成可以存储和传输的utf-8的二进制数据
print(res1) # b'\xe4\xb8\x8a'
# bytes类型 字节串类型 你就把它当成二进制数据即可
res2 = res1.decode('gbk') # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
print(res2)