在Python中進行編碼時,是否認爲通過常規字符串選擇Unicode字符串是一種很好的做法?我主要工作在Windows平臺上,大多數字符串類型現在都是Unicode(即.NET字符串,'_UNICODE'在默認情況下在新的C++項目中打開等)。因此,我傾向於認爲使用非Unicode字符串對象的情況是一種罕見的情況。無論如何,我很好奇Python實踐者在真實世界的項目中做了些什麼。默認情況下,我應該使用Unicode字符串嗎?
回答
從我的做法 - 使用unicode。
在一個項目開始時,我們使用了字符串,但是我們的項目不斷增加,我們正在實施新功能並使用新的第三方庫。在與非Unicode/unicode字符串混亂一些功能開始失敗。我們開始花時間對這些問題進行本地化並修復它們。但是,一些第三方模塊不支持unicode,並且在切換到第三方模塊後開始失敗(但這不是排除規則)。
另外我有一些經驗,當我們需要重寫某些第三方模塊(例如SendKeys),因爲他們不支持unicode。如果它從頭開始它會更好:)
所以我認爲今天我們應該使用unicode。
P.S.所有那些亂七八糟的東西只是我的討厭看法:)
如果您處理嚴重受限的內存或磁盤空間,請使用ASCII字符串。在這種情況下,你應該另外編寫你的軟件在C或更緊湊的東西:)
當你問這個問題,我想你使用的是Python 2.x.
Python 3.0在字符串表示中發生了很大變化,現在所有文本都是unicode。
我會在任何新項目中使用unicode - 以與切換到Python 3.0的兼容方式(請參閱details)。
是的,未來兼容性非常重要! – 2009-07-12 18:17:38
Mihails的附加評論我會說:使用Unicode,因爲它是未來。在Python 3.0中,非Unicode將消失,並且我知道,所有的「U」-Prefixes都會遇到麻煩,因爲它們也消失了。
它可能會非常棘手一直使用Unicode字符串在Python 2.x的 - 無論是因爲有人無意中使用了更自然str(blah)
,他們的意思unicode(blah)
,忘記在字符串文字,第三方模塊不兼容的u
前綴 - 不管。所以在Python 2.x中,只有必須使用unicode,並準備提供良好的單元測試覆蓋率。
但是,如果您可以選擇使用Python 3.x,則無需關心 - 字符串將是unicode,無需額外的工作。
是的,使用unicode。
一些提示:
在做任何類型的二進制格式的輸入輸出,看完之後直接解碼並直接寫入之前編碼,讓你永遠需要混合字符串和unicode。因爲混音往往會導致UnicodeEncodeDecodeErrors遲早。
[忘了這個,我的解釋讓它更加混亂。移植到Python 3只是一個問題,那麼你可以關心它。]
Unicode的常見Python新手錯誤(不是說你是新手,但這可能會被新手讀取):不要混淆編碼和解碼。請記住,UTF-8是一種編碼,因此您將Unicode編碼爲UTF-8和DEcode。
不要陷入在Python中設置默認編碼的誘惑(通過sitecustomize.py中的setdefaultencoding或類似的方法)到最常用的任何東西。如果您重新安裝或移動到另一臺計算機或突然需要使用其他編碼,這隻會給您帶來問題。明確。請記住,並不是所有的Python 2s標準庫都接受unicode。如果你喂一個unicode方法,它不起作用,但它應該嘗試將它餵給ascii並看看。示例:urllib.urlopen(),如果您爲其提供unicode對象而不是字符串,則會失敗並顯示無用的錯誤。
嗯。這就是我現在能想到的!
第3點是如此真實 - 我認識的每個人(包括我)都犯了這個錯誤,而不僅僅是一次! – 2009-07-12 19:05:52
- 1. 值「零」默認情況下,字符串
- 2. 默認情況下,類中的方法應該是classmethod嗎?
- 3. 在字符串的情況下應該如何使用同步?
- 4. 默認情況下,使qmake使用qt5
- 5. 產量和默認情況||不輸出默認情況下
- 6. 默認情況下,法國
- 7. 安卓:默認情況下
- 8. Java:我應該在這種情況下使用多線程嗎?
- 9. 在這種情況下我應該使用繼承嗎?
- 10. 在這種情況下我應該使用例外嗎?
- 11. 我應該在這種情況下使用新的嗎?
- 12. 在這種情況下,我應該使用Wordpress Transient API嗎?
- 13. 我應該在這種情況下使用嵌套類嗎?
- 14. 我應該在這種情況下使用宏嗎?或...
- 15. 在這種情況下,我應該使用指針向量嗎?
- 16. 我應該在這種情況下使用合併嗎?
- 17. 默認情況下不應該MVC忽略圖像?
- 18. 默認情況下,我該如何懸停?
- 19. 默認情況下ruby-aes使用填充嗎?
- 20. 默認情況下,python27中的導入不應該是絕對的嗎?
- 21. 默認情況下爲數字鍵盤,但允許使用字母字符
- 22. 默認情況下爲什麼不應用(RankNTypes使用)?
- 23. 默認情況下按字典<TKey,TValue>排序嗎?
- 24. 在什麼情況下應該使用AUTOINCREMENT而不是默認的ROW ID?
- 25. 默認情況下禁用Telerik圖例
- 26. 默認情況下修改默認命令:默認命令爲
- 27. 我可以在沒有默認模式的情況下使用FLP嗎?
- 28. 默認情況下,字符串數組是否可以附加到ListView?
- 29. 默認情況下可以啓用ediff功能嗎?
- 30. 應該在這種情況下使用TcpClient嗎?
+1:處理文本時總是使用unicode。每當需要將文本數據視爲字節時(例如在網絡上移動或寫入磁盤時) - 將unicode轉換爲一系列字節(在Python中表示爲一個字符串)。通過調用編碼或unicode進行轉換。 – codeape 2009-07-22 13:31:38