标签:

一、什么是Unicode

在Unicode之前,人们使用ASCII码,即每个英文字符都是以7位二进制数的方式存储在计算机内,其范围是32-126,所以ASCII码字符只能表示95个可打印字符;虽然随后将位数扩展值了8位,但依旧最多只能表示233个字符,对于成千上万的非欧洲语系的语言来说有极大的限制。

Unicode通过使用一个或多个字节来表示一个字符的方法,突破了ASCII的限制,可以表示超过90000个字符。

二、怎么使用Unicode

从1.6版本起引进了Unicode字符串支持,用来转换多种双字节字符的格式、编码以及操作管理。为了让Unicode和ASCII码值的字符串看起来尽可能的相像,Python的字符串从原来的简单数据类型改为真正的对象,即ASCII字符串成了StringType型,而Unicode字符串成了UnicodeType型。

内建的str()函数和chr()函数并没有升级成可以处理Unicode。它们只能处理常规的ASCII编码字符串。如果一个Unicode字符串被作为参数传递给了str()函数,它会先被转换成ASCII字符串,然后再交个str()函数;如果Unicode字符串中包含任何不被ASCII字符串支持的字符,会导致str()函数报异常。

Python默认所有字面上的字符串都用ASCII编码,可以通过在字符串前面加一个‘u‘前缀的方式声明Unicode字符串;也可以使用内建的unicode()和unichar()函数把任何Python的数据类型转换成Unicode字符串,如果是对象,并且该对象定义了‘__unicode__()‘方法,还可以把该对象转换成相应的Unicode字符串。

三、Unicode在实际应用中的注意事项

1.程序中出现字符串时一定要加个前缀‘u‘;

2.用unicode()函数代替str()函数;

3.尽量不要使用过时的string模块;

4.不到必须时不要在你的程序里编解码unicode字符,只有在你写入文件或者数据库或者网络时,才调用encode()函数;相应的在读取数据的时候才调用decode()函数;

5.Python 标准库里面的绝大多数模块都是兼容Unicode的,除了pickle模块,该模块只支持ASCII字符串,因此在使用时要小心;

6.如果你的程序里使用第三方模块,要确保各模块均能统一使用Unicode;

7.在每个应用开发前,先要考虑使用的语言,然后明确统一的编码方式;