python中关于unicode,utf-8,gbk等编码的联系与区别笔记

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两个字节

UNICODE,GBK,UTF-8区别参考链接:

https://www.cnblogs.com/gavin-num1/p/5170247.html

猜你喜欢

转载自blog.csdn.net/feiyang5260/article/details/81947444