使用Python编解码器但仍然获得UnicodeDecodeError

时间:2017-09-01 18:33:34

标签: python-2.7 encoding

我有一个非英文行列表,其中每一行都是字符串和整数列表。我需要将此数据写入文件并相应地将所有数字转换为字符串。 数据内容如下:

[[u'12', u'as', u'ss', u'ge', u'ge', u'm\xfcnze', u'10.0', u'25.2', u'68.05', 1, 2, 0],
[u'13', u'aas', u'sss', u'tge', u'a', u'mat', u'11.0', u'35.7', u'10.1', 1, 1, 1], ...]

循环在包含u'm\xfcnze'的第一个列表中断。

import codecs

with codecs.open("temp.txt", "w", encoding="utf-8") as f:
    for row in data:
        f.write(' '.join([str(r) for r in row]))
        f.write('\n')

上面的代码因UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 38: ordinal not in range(128)错误而失败。

尝试r.encode('utf-8') if isinstance(r, str)并不能解决这个问题,所以我做错了什么?

1 个答案:

答案 0 :(得分:1)

这应该有效:

import codecs

with codecs.open("temp.txt", "w", encoding="utf-8") as f:
    for row in data:
        f.write(' '.join([unicode(r) for r in row]))
        f.write('\n')

我正在使用unicode()功能

注意,因为Python 3字符串数据类型是字符串unicode,所以你的代码在Python 3中运行正常,没有任何修改(不需要str - > unicode)