如何将Python 2.6项目转换为UTF-8?
我们正在将编码从latin1转换为UTF-8,并且有10万行的Python代码。
而且我对Python还很陌生(哈哈哈!)。
我已经知道,当使用str()
函数处理Unicode时会出错,所以我们应该用unicode()
来代替,效果几乎是一样的。
还有哪些代码部分是“危险”的呢?
有没有一些基本的指导原则或算法来帮助我们转换到UTF-8?能不能写一个自动的“代码转换器”?
3 个回答
一种快速将Python 2.x的默认编码改为UTF-8的方法是设置默认编码。不过,这种方法有一些缺点,主要是它会改变所有库和你自己应用的编码,所以使用时要小心。我的公司在生产应用中使用这种技术,效果不错。而且这种方法在Python 3中也是兼容的,因为Python 3的默认编码就是UTF-8。你仍然需要把str()
改成unicode()
,但就不需要在.decode()
和.encode()
中明确指定编码了。
能不能写一个自动的“代码转换器”?=)
不行。str
和unicode
是两种不同的类型,它们的用途也不同。你不应该试图在Python 2或Python 3中把每个字节字符串都替换成Unicode字符串。
继续使用字节字符串来处理二进制数据。特别是你写入文件或网络连接的数据都是字节。而用户看到的文本则应该使用Unicode字符串。
在这两者之间,有一个模糊的区域,就是内部的ASCII字符字符串,这些字符串可以是字节也可以是Unicode。在Python 2中,这些通常是字节,而在Python 3中,通常是Unicode。如果你愿意把代码限制在Python 2.6及以上版本,你可以把明确是字节的字符串标记为b''
和bytes
,把明确是字符的字符串标记为u''
和unicode
,然后用''
和str
来表示“默认字符串类型”的字符串。
str
和unicode
是类,不是函数。当你写str(u'abcd')
的时候,其实是在创建一个新的字符串,这个字符串的内容是'abcd'。恰好str()
可以用来把任何类型的字符串转换成ascii格式的str
。
还有一些地方需要注意,比如从文件或输入中读取数据,或者说任何你从一个不是为unicode编写的函数中得到的字符串。
祝你玩得开心 :)