CSV 文件通常用于数据交换,通常包含重音字符,需要 UTF8 编码才能保持其完整性。然而,Python csvreader 仅支持 ASCII 数据。
尝试读取带有重音法语或西班牙语字符的 UTF8 CSV 文件时,尽管使用代码处理 UTF8 编码,但出现以下异常遇到:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 68: ordinal not in range(128)
解决方案在于理解encode方法的用途。它将 Unicode 字符串转换为字节字符串,反之亦然。通过正确利用 codecs 模块,特别是 codecs.open 来处理 UTF8 文本文件,可以简化代码:
<code class="python">import csv def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs): csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs) for row in csv_reader: yield [unicode(cell, 'utf-8') for cell in row] filename = 'da.csv' reader = unicode_csv_reader(open(filename)) for field1, field2, field3 in reader: print field1, field2, field3 </code>
如果输入数据不是 UTF8,例如ISO-8859-1,代码需要转码:
<code class="python">line.decode('whateverweirdcodec').encode('utf-8')</code>
但是,这通常是不必要的,因为 csv 可以直接处理 ISO-8859-* 编码的字节字符串。
以上是读取 CSV 文件时如何在 Python 中处理 UTF8 编码?的详细内容。更多信息请关注PHP中文网其他相关文章!