py08-字符编码
1、什么是字符编码?
计算机要想工作必须通电,也就是说电能驱使计算机干活,而电的特性就是高低电平(高低平即二进制数1,低电平即二进制数0),也就是计算机只认识数字。
很明显,我们平时在使用计算机时,用的都是人类能读懂的字符,如何能让计算机读懂人类的字符?
必须经过一个过程:
字符------(翻译过程)------->数字
2、字符编码的发展史
阶段一:现代计算机起源于每个,最早诞生也是基于英文考虑的ASCII。
ASCII:一个Bytes代表一个字符,1Bytes=8bit
阶段二:为了满足中文,中国人定制了GBK
GBK:2Bytes代表一个字符。
为了满足其他国家,各个国家纷纷定制了自己的编码,日本把日文编到Shift_JIS
里,韩国把韩文编到Euc-kr
里。
阶段三:各国有各国的标准,就会不可避免出现冲突,结果就是在多语言混合的文本中,显示会出现乱码。于是产生了Unicode,统一用2Bytes代表一个字符。
接着就产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes。
对比:
unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大。
utf-8:精确,对不同的字符用不同的长度来表示,优点是节省空间,缺点是字符->数字的转换速度慢,因为每次都需要计算出字符需多长的Bytes才能够准确表示。
特例:
1、内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)
2、硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性。
3、字符编码作用:
unicode----->encode('utf-8')-------->utf-8
utf-8-------->decode('utf-8')---------->unicode
原则:字符以什么格式编译的,就要以什么格式解码
python3中的字符串分为两种:
x='egon' 存储unicode
y=x.encode('utf-8') 存成bytes
python2中字符串也分两种:
x=u'egon' 与python3中的字符串一样
y='alex' 与python3中的bytes一样