2010-09-09 79 views

回答

2

您可能希望通過使用parserdis內置模塊解析Python源代碼來編寫一個這樣的warnging-generator工具。您也可以考慮在pylint中添加這樣的功能。

4

你應該前綴的所有字符串文字與 'U'

沒有,真的沒有。

您應該使用u前綴字符串的文字。但並不是所有的字符串都是字符串。在與基於字節的組件通信時,如網絡服務或二進制文件,您需要使用字節字符串。

例如。想要嘗試將Unicode字符串寫入PNG文件?不明智。想要base64解碼字符串Y2Fm6Q==?你不能在這裏合理地使用Unicode字符串,base64是明確的字節。

當然,Python會經常讓你得逞的傳遞unicode字符串,其中一個字節串的預期,但只能通過自動編碼爲ASCII。如果字符串包含非ASCII字符,您將獲得UnicodeError,就像您使用的字節是unicode所期望的那樣。 「Unicode是正確的,字節是錯誤的」是一個破壞性的神話。這兩種字符串的操作都是必需的。

如果您擔心過渡到Python 3,您當然應該將您的字符串標記爲u'',但您還應該將顯式字節字符串標記爲b''。無關緊要的字符串可以保留爲'',並讓它們在Python 3中從字節字符串轉換爲unicode字符串。有很多情況下,Python 2用於使用字節,而Python 3在適當的地方使用Unicode這個。但是仍然有很多情況下你確實需要說話字節,並且將其轉換爲Python 3作爲unicode會導致問題。

(與此唯一的問題是b''語法需要Python 2.6或更高版本,所以使用它會令你與早期版本不兼容。)

+0

採取了點,我編輯我的問題。 – 2010-09-09 10:08:36

1

KennyTM的評論應張貼作爲一個答案:

from __future__ import unicode_literals 

這個未來的聲明可以在Python 2.6和2.7中使用,並且支持Python 3的字符串語法,因此前綴不固定的字符串是Unicode字符串,而字節數組需要前綴b