为什么Python 2 csv模块不支持unicode?

时间:2015-06-23 14:30:28

标签: python csv unicode

您可能知道Python 2 stdlib csv模块没有“正确”支持unicode。它期望二进制字符串在获取文件时写入文件。

对我而言,这似乎有点违反直觉,因为我会告诉人们在内部使用unicode字符串并通过使用codecs.open(..., encoding='...')打开文件来正确地为外部世界序列化,但在csv中模块案例您需要手动为传入的lists / dicts执行此操作。

总是让我感到困惑,为什么会这样,现在一位同事再次问我,我不得不承认除了“可能已经成长并且从未修复过”之外,我不知道任何理由。

似乎即使PEP305已经包含了unicode的TODO和对codecs.open的引用。

这里有一些聪明的蟒蛇大师谁知道并且可以启发我们?

1 个答案:

答案 0 :(得分:0)

Python 2 csv不支持Unicode,因为CSV不支持Unicode。

RFC 4180中定义的CSV,通常用法不过是一个字节序列。没有标准来定义这些字节如何映射到可读文本,并且不同的CSV处理工具具有不同的行为。如果Python的csv提供了特定的编码规则,那么在许多情况下它们就会出错。最好让用户通过使用适用于该应用程序的任何约定手动编码/解码来决定。

Python 3 csv获得Unicode支持,因为它与文本IO流进行通信(因为这些现在更常见)。它们有自己的编码,但是如果您使用其默认编码的CSV,结果仍然会出错。