我正在研究某人处理数据的代码,并在此问题上遇到错误:
chars_sst_mangled = ['à', 'á', 'â', 'ã', 'æ', 'ç', 'è', 'é', 'í',
'í', 'ï', 'ñ', 'ó', 'ô', 'ö', 'û', 'ü']
sentence_fixups = [(char.encode('utf-8').decode('latin1'), char) for char in chars_sst_mangled]
错误消息是
"UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)"
我想知道这里的问题是什么,以及如何解决它?
答案 0 :(得分:2)
代码被破坏了。
特定错误表明您正在尝试使用python2可执行文件运行Python 3代码:
>>> 'à'.encode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
'à'
是Python 2上的字节串,因此调用.encode()
方法需要先将字节串解码为Unicode。它是使用{2}中的sys.getdefaultencoding()
'ascii'
来触发UnicodeDecodeError
。
正确的方法是删除伪造的char.encode('utf-8').decode('latin1')
转换并使用Unicode文字:
# -*- coding: utf-8 -*-
放在顶部,以便在源代码中硬编码的字符串文字中的非ascii字符将被正确解释from __future__ import unicode_literals
以便'à'
即使在Python 2上也会创建Unicode字符串。