1. 程式人生 > >Python Unicode編碼

Python Unicode編碼

其中 它的 pick 不能 encode 如果 兼容 type text

使用技巧

事實上,只要遵守以下規則,可以規避90%由於Unicode字符串處理引起的bug,剩下的10%通過python的庫和模塊能夠解決。

  • 程序中出現字符串時一定要加個前綴u。

  • 不要用str()函數,用unicode()代替。

  • 不要用過時的string模塊——如果傳給它的是非ASCII字符,它會把一切搞砸。

  • 不到必須時不要在你的程序裏面解碼unicode字符。只在你要寫入文件或數據庫或者網絡時,才調用encode()函數;相應地,只在你需要把數據讀回來的時候才調用decode()函數。


從現實中得來的教訓

失誤#1:你必須在一個極有限的時間內寫出一個大型的應用,而且需要其他語言的支持,但是產品經理並沒有明確定義這一點。你並沒有考慮Unicode的兼容,知道項目快要結束……這時候再添加Unicode的支持幾乎不太可能,不是嗎?

結果#1:沒能預測到最終用戶對其他語言界面的需求,在集成他們用的面向其他語種的應用時又沒有使用Unicode支持。更新整個系統即讓人覺得枯燥,又浪費時間。


失誤#2:在源碼中到處使用string模塊或者str()和chr()函數。

結果#2:通過全局的查找替換把str()和chr()替換成unicode()和unichr(),但是這樣一來很可能就不能再用pickle模塊,要用的話只能把所有要pickle處理的數據存成二進制形式,這樣一來就必須修改數據庫的結構,而修改數據庫結構意味著全部推到重來。


失誤#3:不能確定所有輔助系統都完全地支持Unicode。

結果#3:不得不去為那些系統打補丁,而其中有些系統可能你根本就沒有源碼。修復對Unicode支持的bug可能會降低代碼的可靠性,而且非常有可能引入新的bug。


總結:使應用程序完全支持Unicode,兼容其它的語言本身就是一個工程。它需要詳細的考慮、計劃。所有涉及的軟件、系統都需要檢查,包括python的標準庫和其他將要用到的第三方擴展模塊。你甚至有可能需要組建一個經驗豐富的團隊來專門負責國際化(I18N)問題。


節選自《python核心編程(第二版)》P130、P131


Python Unicode編碼