Python的ASCII,GB2312,Unicode,UTF-8相互转换
ASCII 是⼀种字符集,包括⼤⼩写的英⽂字母、数字、控制字符等,它⽤⼀个字节表⽰,范围是 0-127 Unicode分为UTF-8和UTF-16。
UTF-8变长度的,最多 6 个字节,⼩于 127 的字符⽤⼀个字节表⽰,与 ASCII 字符集的结果⼀样,ASCII 编码下的英语⽂本不需要修改就可以当作 UTF-8 编码进⾏处理。Python 从 2.2 开始⽀持 Unicode ,函数 decode( char_set )可以实现其它编码到 Unicode 的转换,函数 encode( char_set )实现 Unicode 到其它编码⽅式的转换。
⽐如unicode字符转中文
("你好").decode( "GB2312")
将得到
u'\u4f60\u597d',
即 "你"和“好"的 Unicode 码分别是 0x4f60 和 0x597d
再⽤
(u'\u4f60\u597d').encode("UTF-8")
将得到
'\xe4\xbd\xa0\xe5\xa5\xbd'
它是 “你好”的UTF-8编码结果。
python中使⽤ unicode的关键:unicode是⼀个类,函数unicode(str,"utf8")从utf8编码(当然也可以是别的编码)的字符串str⽣成 unicode类的对象,⽽函数
>>> unicode("你好", "utf8")
u'\u4f60\u597d'
>>> x = _
>>> type(x)
>>> type("你好")
>>> x.encode("utf8")
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> x.encode("gbk")
'\xc4\xe3\xba\xc3'
>>> x.encode("gb2312")
'\xc4\xe3\xba\xc3'
>>> print x
你好
>>> de("utf8")
你好
>>> de("gbk")
以上是测试结果(Ubuntu 6.06,locale为utf8),注意type(x)和type("你好")的区别。从编码上可以看出utf8编码与gbk不同。在utf8的 locale设置下,打印x按该环境变量编码(我猜我猜我猜猜猜),⽽打印x.encode("gbk")则是乱码。