首先,作为一种策略,我会采取一小部分程序并尝试将其移植。您所描述的unicode
调用的数量向我建议,您的应用程序比大多数人更关心字符串表示,每个用例通常都不相同。
重要的考虑因素是所有字符串都是Python 3中的unicode 3。如果您正在使用str
类型来存储“字节”(例如,如果它们是从文件读取的),那么您应该知道这些字符不会是Python3中的字节,而是以Unicode开头的字符。
我们来看几个例子。
首先,如果您根本没有任何非ASCII字符,并且确实没有使用Unicode字符集,则很容易。有机会,你可以简单地将unicode()
函数更改为str()
。这将确保任何作为参数传递的对象都被正确转换。然而,假设这很容易,这是一厢情愿的想法。
很可能,您需要查看unicode()
的参数以查看它是什么,并确定如何处理它。
例如,如果从在Python 2文件读取UTF-8字符,将它们转换为Unicode代码应该是这样的:
data = open('somefile', 'r').read()
udata = unicode(data)
然而,在Python3,read()
返回的Unicode数据首先,和Unicode解码必须在打开文件时指定:
udata = open('somefile', 'r', encoding='UTF-8').read()
正如你所看到的,可移植很大程度上取决于应用程序如何以及为什么这样做的Unicode convers当转化unicode()
简单离子,数据来自哪里以及去哪里。
Python3为字符串表示带来更大的清晰度,这是值得欢迎的,但可以使移植变得艰巨。例如,Python3具有适当bytes
类型,并且您字节数据为Unicode这样转换:使用相反的变换
udata = bytedata.decode('UTF-8')
或转换Unicode数据至字符形式。
bytedata = udata.encode('UTF-8')
我希望这至少有助于确定一个策略。
https://docs.python.org/3/howto/pyporting.html – vaultah
@vaultah这不是一个普遍的问题。它只是关于'unicode()'调用。我目前工作的代码库中,大约有700个调用这个方法的地方。我该怎么办? – guettli
这个问题没有很好的答案。如果你幸运的话,你可以删除对“unicode”的调用,你很好。所有字符串在Python 3中都是unicode。如果这不起作用,那么期望* lot *的工作。当从Python 2切换到3时,从str到unicode文字和字节的转换是迄今为止最不兼容的改变。 – Phillip