1.基本概念
(1)字符和字节是两个不同的术语,在unicode中一个字符就是两个字节,如’人’一个字符占两个字节。对于python中len()函数,len(u’中国’)和len(‘hi’)一样长度值都为2,这里长度是指字符长度
(2)ASCII码跟Unicode没有本质的区别。只不过Unicode表示范围比ASCII大
(3)在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码
2.unicode和utf-8的区别
(1)unicode是charset(字符集),包括GBK,GBK2312也是字符集
(2)utf-8是encoding(编码):多字节编码,对英文使用8位(1个字节),对中文使用24位(3个字节)编码
(3)unicode是一个字符集,utf-8是在这个字符集基础上的一种具体的编码方案,为了更好的存储和传输,还有utf-16,utf-32等。
3.平时我们读取utf-8编码保存的txt文件的原理:
文本文档是utf-8编码保存的,这样可以最大限度的节省空间。但是当对文档进行操作时,计算机会先把utf-8转换为unicode然后放在内存中,保存时又将unicode转换为utf-8。
4.python之中utf-8,unicode,gbk之间转换
(1)在一些应用场景,会出现这样的需求:UTF-8 -> Unicode -> GBK,然而,unicode与GBK没有相对应的算法可以直接转换,gbk与unicode没有直接的对应关系,只能通过一张大表将两者联系起来。
(2)在python中unicode中的type为str,gbk/utf-8的类型为byte,如下图
(3)unicode,utf-8,gbk之间的转换,需要先转为unicode
utf-8 <---> unicode <---> gbk
转换例子:
s=u'小明'
#编码为utf-8
s_utf = s.encode('utf-8')
#变为为gbk,先解码为unicode,再编码
s_gbk = s_utf.decode('utf-8').encode('gbk')
结果如下图所示,utf-8一个中文占3个字节,gbk两个字节