Python 编码问题

2011-07-18

Python字符串处理经常遇到

UnicodeEncodeError: 'ascii' codec can't encode characters in position 853-860: ordinal not in range(128)

Python1.6之前只支持 ASCII 码。 Python对 ASCII长度支持是 128 很多时候 128个字符是不够用的。 我在使用正则匹配时 也经常遇到这样的问题。查了好多资料才找到解决方法 引用《Python核心编程》一书的阐述: 内建的str()函数和chr()函数并没有升级成可以处理Unicode.它们只能处理常规的 ASCII 编码字符串,如果一个Unicode 字符串被作作为参数传给了str()函数,它会首先被转换 成ASCII 字符串然后在交给str()函数.如果该Unicode 字符串中包含任何不被ASCII 字符串支 持的字符,会导致str()函数报异常.同样地,chr()函数只能以0 到255 作为参数工作.如果你 传给它一个超出此范围的值(比如说一个Unicode 字符),它会报异常. 新的内建函数unicode()和unichar()可以看成Unicode 版本的str()和chr().Unicode() 函数可以把任何Python 的数据类型转换成一个Unicode 字符串,如果是对象,并且该对象定义 了__unicode__()方法,它还可以把该对象转换成相应的Unicode 字符串.