一、字符编码
1.计算机三大核心硬件
CPU:将数据渲染给用户
内存:临时存取数据,断电消失
硬盘:永久保存数据,断电还有
2.什么是字符编码?
人类能识别的是字符的高级标识符,电脑只能识别0,1,要完成人与机器之间的信息交流一定需要一个媒介,进行两种标识符的转化(两种标识符的duiying关系)
对应关系形成的结构称之为:编码表
编码表的发展史
1.ascii(ASCII):字母,数字,英文符号与计算机01标识符的对应关系
思考:如何将128个字符用01完全标识
二进制:1111 1111 => 255 => 1bytes(1字节) => 8个二进制位
2.中国:研究汉字与计算机01标识符的对应关系:gb2312 => GBK(常用)=> GB18030
日本:Shift_JIS
韩国:Euc_kr
乱码:存数据和读数据采用的编码表不一致
软件打开文件读取数据的流程:
- 打开软件
- 往计算机发送一个打开文件的指令,来打开文件
- 读取数据渲染给用户
python解释器打开py文件
- 打开软件(python解释器)
- 往计算机发送一个打开文件的指令,来打开文件
- 逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户
python 解释失败的原因:
py2默认AscII来解释文件内容,py3默认按UTF-8来解释文件内容
文件头:# encoding:GBK
功能:告诉py解释器按照什么编码解释文件内容
制造一个可以完成万国字符与计算机01标识符的对应关系的编码表
编码表:unicode表
py2:ASCII,没有按万国编码,原因py2诞生先于万国编码
py3:utf-8,采用万国编码来解释文本内容
思考:unicode与utf-8什么关系
unicode:用2个字节存储汉字,用2个字节存储英文字母,占有空间较多,读取效率极高
utf-8:用3-6个字节存储汉字,用1个字节存储英文字母,占有空间较少(所占字节数,字符),读取效率低
总结:内存都是按unicode存储数据,硬盘和CPU按utf-8来存取数据。unicode和utf-8采用一张unicode编码表,utf-8是unicode的一种体现方式,变长存取数据。
变长存取优势:大量数据都是以英文存在,所以utf-8空间更小,传输速度更快。
二、三种字符串
1.三种字符串例子
(1)unicode字符串,默认字符串
s1 = u’abc你好\n不好’
(2)字节字符串
s2 = b’abc123\xb7\xb7’
(3)原义字符串:不对字符串内部做任何操作(eg:\n的转化)
s3 = r’abc你好\n不好’
2.编码与解码
s = '123呵呵'
b = bytes(s, encoding='utf-8')
print(b)
b = b'123\xe5\x91\xb5\xe5\x91\xb5'
n_s = str(b, encoding='utf-8')
print(n_s)
或者
#将u字符串编码成b字符串 原始的到二进制
u''.encode()
print(u'你好'.encode('utf-8'))
#将b字符串解码成u字符串 二进制到原始的
b''.decode()