Python的字符串编码相关小结

Python的字符串编码

 

1.      关于Unicode的简单小结

中文字符编码(属于双字节字符集)集的表示范围:GB2312 < GBK < GB18030

UnicodeUCSUTF

其中,UCSUnicode的全称,即"Universal Multiple-Octet Coded CharacterSet",是字符的编码表示方式,UCS分为UCS-2UCS-4两种。UCS-2使用2个字节编码,UCS-4使用4个字节编码。

UTF则制订了如何传输UNICODE的方法,主要有UTF8UTF16UTF32等。例如:

字的Unicode编码是6C49,而其UTF-8字节流为:E6 B1 89,如下所示:

 

UTF字节序,文件格式和BOM

UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。BOM即为字节序的标记方法。

UCS编码中,有一个"ZERO WIDTH NO-BREAKSPACE"的字符,其编码是FEFF,而FFFEUCS中不存在,所以UCS规范建议传输字节流前,先传输"ZERO WIDTH NO-BREAKSPACE",即FEFF。这样,如果文件开头为FFFE,则表示文件是Little-Endian的,即UTF-16-Little-Endian格式,如果文件头为FEFF,则表示文件是UTF-16-Big-Endian格式。

UTF8不需要字节序的声明,但是采用了BOM表明编码方式。而FEFFUTF8编码为EFBBBF,所以如果文件头为EFBBBF,则该文件是UTF8编码。

 

2.      Python中的print和汉字

print会对输出的文本做自动的编码转换, print转换的目的编码和环境变量有关,Windows XP是转换为gbk的。可以使用用locale模块的getdefaultlocale方法获得当前环境的编码。而print在输出时会把字符串自动转换为这种编码。

 

3.      Python编译器和源文件的字符集编码

Python解析器读入文件时,先解析文件中的编码声明,我们假设文件的编码为gb2312,那么先将文件中的内容由gb2312转换成Unicode,然后再把这些Unicode转换为UTF-8格式的字节串。完成这一步骤后,解析器把这些UTF-8字节串分段,解析。如果遇到使用Unicode字符串,那么就使用相应的UTF-8字节串创建Unicode字符串,如果程序中使用的是一般的字符串,那么解析器先将UTF-8字节串通过Unicode转换成相应编码(这里就是gb2312编码)的字节串,并用其创建一般的字符串对象。也就是说,Unicode字符串跟一般字符串在内存中的存放格式是不一样的,前者使用UTF-8的格式,后者使用GB2312格式。

注:字符集编码不要使用两字节或以上的方式,例如UTF16。否则会增加python解析器的复杂度。

以下是使用默认编码:

 

以下是声明UTF8后。

 

4.      Python中的encodedecode

Python里有两种字符串,一种是Unicode字符串,一种是一般的字符串。

Python里字符串的encode函数负责将unicode字符串转化为另外一种Unicode编码形式。

decode函数负责将一般的字符串进行解码,结果为unicode编码。还有一点是unicode()负责将一般的字符串解码为指定格式的unicode字符串。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值