在python

时间:2016-05-02 10:01:38

标签: python encoding

我正在尝试打印一个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)

1 个答案:

答案 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)