【问题标题】:Which encoding is in use by csv.DictReader when reading csv?读取 csv 时 csv.DictReader 使用哪种编码?
【发布时间】:2016-09-28 11:49:59
【问题描述】:

我有一个保存为 UTF-8 编码的 csv 文件。

它包含非 ASCII 字符 [元音变音]。

我正在使用以下方式读取文件:

csv.DictReader(<file>,delimiter=<delimiter>).

我的问题是:

  1. 正在读取的文件采用哪种编码方式?
  2. 我注意到为了将字符串引用为 utf-8,我需要执行:

    str.decode('utf-8')
    

    有没有更好的方法,然后以一种编码读取文件,然后转换为另一种编码,即utf-8

[Python 版本:2.7]

【问题讨论】:

标签: python python-2.7 csv encoding utf-8


【解决方案1】:

在 Python 2.7 中,CSV 模块不应用任何解码 - 它以二进制模式打开文件并返回字节字符串。

使用https://github.com/jdunck/python-unicodecsv,即时解码。

像这样使用它:

with open("myfile.csv", 'rb') as my_file:    
    r = unicodecsv.DictReader(my_file, encoding='utf-8')

r 将包含一个 Unicode 字典。以binary 模式打开源文件很重要。

【讨论】:

    【解决方案2】:

    使用实例和类来实现这一点怎么样?

    您可以在类级别存储共享字典,也可以让它加载 Unicode 文本文件,甚至检测它们的编码,无论是否使用 BOM 文件掩码。

    很久以前,我编写了一个简单的库,它用支持 Unicode 的库覆盖了默认的 open()

    如果您执行import tendo.unicode,您也可以更改 csv 库加载文件的方式。

    如果您的文件没有 BOM 标头,则库将采用 UTF-8 而不是旧的 ascii。如果需要,您甚至可以指定其他后备编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 2014-09-02
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多