您可能知道Python 2 stdlib csv
模块没有“正确”支持unicode。它期望二进制字符串在获取文件时写入文件。
对我而言,这似乎有点违反直觉,因为我会告诉人们在内部使用unicode字符串并通过使用codecs.open(..., encoding='...')
打开文件来正确地为外部世界序列化,但在csv
中模块案例您需要手动为传入的lists
/ dicts
执行此操作。
总是让我感到困惑,为什么会这样,现在一位同事再次问我,我不得不承认除了“可能已经成长并且从未修复过”之外,我不知道任何理由。
似乎即使PEP305已经包含了unicode的TODO和对codecs.open
的引用。
这里有一些聪明的蟒蛇大师谁知道并且可以启发我们?
答案 0 :(得分:0)
Python 2 csv
不支持Unicode,因为CSV不支持Unicode。
RFC 4180中定义的CSV,通常用法不过是一个字节序列。没有标准来定义这些字节如何映射到可读文本,并且不同的CSV处理工具具有不同的行为。如果Python的csv
提供了特定的编码规则,那么在许多情况下它们就会出错。最好让用户通过使用适用于该应用程序的任何约定手动编码/解码来决定。
Python 3 csv
获得Unicode支持,因为它与文本IO流进行通信(因为这些现在更常见)。它们有自己的编码,但是如果您使用其默认编码的CSV,结果仍然会出错。