Python中的字符串编码(Encode)与解码(Decode)

强烈推荐文章 Pragmatic Unicode:http://nedbatchelder.com/text/unipain.html


Unicode:一套字符编码方案,为各字符定义一个对应的码位(Code Point)。可简单理解为,一个包含了各种字符及与各字符相关联整数值的映射表(实际上还包含其它信息),表中的每一个条目为 <字符, 整数值> 对。注意,Unicode本身并不规定字符应当如何以二进制形式进行存储。

UTF-8:Unicode编码方案的具体实现之一(还有 UTF-16、UTF-32 等,UTF 为 Unicode Transformation Format 的编写),描述了如何将各字符以二进制进行存储。UTF-8为非定长编码实现,对于不同的字符,其用于二进制存储的字节个数为 1-6 个。如果将Unicode中字符对应码位的整数值形式与UTF-8编码中字符的整数值形式比较,它们并不一定相同。UTF-8 编码内部不含 0 字节,可以被 strlen() 等 C 函数正确处理。

编码:将一个Unicode字符串转换为一个字节序列(a sequence of bytes,a string of bytes)。码位 <128 时与 ASCII 编码相同,码位 <255 时与 Latin-1 编码相同。
解码:将字节序列转换为Unicode字符串。

Python 2.x Unicode支持:
Unicode字符串为内置类型unicode(继承自basestringstr也继承自basestring)。
unichr()用于构造长度为1的Unicode字符串,ord()用于获取单个Unicode字符的码位。
.encode([encoding], [errors='strict'])用于将 unicode 转换为 str (str类型为8 bit字节序列)。

>>> a = u'Unicode字符串'
>>> type(a)
<type 'unicode'>
>>> b = a.encode('utf-8')
>>> type(b)
<type 'str'>

.decode([encoding], [errors])用于将 str 转换为 unicode

>>> c = b.decode('utf-8')
>>> type(c)
<type 'unicode'>

使用codecs模块的open函数读写Unicode数据。

Python 3.x Unicode支持:
str类型为Unicode字符序列,bytes类型为字节序列(bytesbytearray的不可变版,使用b"..."构造bytes)。
支持使用Unicode字符作为代码中的标识符。
str.encode()str转换为bytes
bytes.decode()bytes转换为str
3.x中basestring类型被移除。

参考:
1.http://zh.wikipedia.org/wiki/Unicode
2.http://zh.wikipedia.org/wiki/%E7%A0%81%E4%BD%8D
3.http://zh.wikipedia.org/wiki/UTF-8
4.http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
5.https://docs.python.org/2/howto/unicode.html
6.https://docs.python.org/3/howto/unicode.html
7.https://docs.python.org/3.0/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

发表评论

电子邮件地址不会被公开。