我写了一个处理带有非ASCII字符的CSV文件的Python脚本,编码为UTF-8。但输出的编码已损坏。因此,从这个输入开始:
我得到了这个输出:
你能建议编码错误可能来自哪里吗?以前有类似的情况吗?
编辑:我正在使用带有UnicodeWriter类的csv标准库,该类在docs中提供。 我使用的Python版本是2.6.6。
编辑2:重现此行为的代码:
输入数据在此处可用(大文件)。
"d\xc4\x9bjin hornictv\xc3\xad"
我得到了这个输出:
。
"d\xe2\x99\xafjin hornictv\xc2\xa9\xc6\xaf"
你能建议编码错误可能来自哪里吗?以前有类似的情况吗?
编辑:我正在使用带有UnicodeWriter类的csv标准库,该类在docs中提供。 我使用的Python版本是2.6.6。
编辑2:重现此行为的代码:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import csv
from pymarc import MARCReader # The pymarc package available PyPI: http://pypi.python.org/pypi/pymarc/2.71
from UnicodeWriter import UnicodeWriter # The UnicodeWriter from: http://docs.python.org/library/csv.html
def getRow(tag, record):
if record[tag].is_control_field():
row = [tag, record[tag].value()]
else:
row = [tag] + record[tag].subfields
return row
inputFile = open("input.mrc", "r")
outputFile = open("output.csv", "wb")
reader = MARCReader(inputFile, to_unicode = True)
writer = UnicodeWriter(outputFile, delimiter = ",", quoting = csv.QUOTE_MINIMAL)
for record in reader:
if bool(record["001"]):
tags = [field.tag for field in record.get_fields()]
tags.sort()
for tag in tags:
writer.writerow(getRow(tag, record))
inputFile.close()
outputFile.close()
输入数据在此处可用(大文件)。
csv
标准库。我甚至尝试了http://docs.python.org/library/csv.html上提供的`UnicodeWriter`类。 - Jindřich Mynarz