我正在尝试打印一个dicts列表,以便在latin-1中编码。每个字段由ASCII字符254分隔,行尾应为ASCII字符20.
当我尝试使用大于128的字符时,我得到" UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe in position 12: ordinal not in range(128)
"
这是我目前的代码。有人可以帮我解决如何编码ASCII字符254以及如何在使用DictWriter时添加行尾ASCII char 20。
由于 我的代码:
with codecs.open("test.dat", "w", "ISO-8859-1") as outputFile:
delimiter = (chr(254))
keys = file_dict[0].keys()
dict_writer = csv.DictWriter(outputFile, keys, delimiter=delimiter)
dict_writer.writeheader()
for value in file_dict:
dict_writer.writerow(value)
答案 0 :(得分:0)
ASCII仅包含字符代码0-127。
128-255范围内的代码未在ASCII中定义,只在扩展它的编解码器中定义,如ANSI,latin-1或所有Unicode。
在你的情况下,它可能以某种方式对字符串进行双重编码,但失败了。
如果您使用标准的内置open
函数而不指定编解码器,则它可以工作:
with open("test.dat", "w") as outputFile: # omit the codec stuff here
delimiter = (chr(254))
keys = file_dict[0].keys()
dict_writer = csv.DictWriter(outputFile, keys, delimiter=delimiter)
dict_writer.writeheader()
for value in file_dict:
dict_writer.writerow(value)