尝试在 Python 中将数据写入 CSV 时,我收到以下错误。
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 150, in writerows
UnicodeEncodeError: 'ascii' codec can't encode character u'\xd3' in position 0: ordinal not in range(128)
这是我尝试写入 CSV 的字典示例:
{'Field1': 'Blah \xc3\x93 D\xc3\xa1blah', 'Field2': u'\xd3', 'Field3': u'Blah', 'Field4': u'D\xe1blah'}
我知道您不能使用 Python 将 unicode 写入 CSV,但我无法弄清楚要转换为什么以及如何转换它。
编辑:这是我尝试过的。 dictList
是取自另一个 CSV 的字典列表。
WANTED_HEADERS = ['First Name',
'Last Name',
'Date',
'ID']
def utf8ify(d):
return dict((str(k).encode('utf-8'), str(v).encode('utf-8')) for k, v in d.iteritems())
def ListToCSVWithHeaders(data_list, output_file_name, headers):
output_file = open(output_file_name, 'w')
header_row = {}
to_append = []
for entry in data_list:
to_append.append(utf8ify(entry))
for key in entry.keys():
if key not in headers:
headers.append(key)
print 'KEY APPENDED: ' + key
for header in headers:
header_row[header] = header
data = [header_row]
data.extend(to_append)
data_writer = csv.DictWriter(output_file, headers)
data_writer.writerows(data)
print str(len(data)) + ' rows written'
ListToCSVWithHeaders(dictList, 'output.csv', WANTED_HEADERS)
这是我在运行时收到的错误。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128)