2015-06-23 40 views
0

正如你可能知道Python 2 stdlib csv模塊沒有「正確地」支持unicode。它期望它在寫入文件時獲得它們的二進制字符串。爲什麼Python 2 csv模塊不支持unicode?

對我來說,這似乎有點反直覺,因爲我會告訴人們在內部使用unicode字符串並通過打開codecs.open(..., encoding='...')文件正確地序列化外部世界的事情,但在csv模塊的情況下,您需要執行此操作手動爲lists/dicts你通過。

它總是困惑我爲什麼這是現在,一個同事再次問我,我不得不承認,我不知道任何理由除了「可能成長和從未修復「。

看來,即使PEP305已經包含unicode的TODO和codecs.open的引用。

這裏有一些聰明的蟒蛇大師誰知道並可以啓發我們嗎?

回答

0

的Python 2 csv不支持Unicode,因爲CSV不支持Unicode。

CSV在RFC 4180中定義,常用用法不超過一個字節序列。沒有標準來定義這些字節如何映射到可讀文本,並且不同的CSV處理工具具有不同的行爲。如果Python的csv提供了特定的編碼規則,那麼在很多情況下它們都是錯誤的。更好的是讓用戶通過使用適用於該應用程序的任何慣例進行手動編碼/解碼來決定。

的Python 3個csv收益Unicode支持儘可能多的,因爲它有跟文本IO流(因爲這些都是現在更常見)。這些編碼有自己的編碼,但是如果使用其默認編碼爲CSV的編碼,結果仍然會出現錯誤。