首先,作爲一種策略,我會採取一小部分程序並嘗試將其移植。您所描述的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