Python ascii编解码器无法解码字节0xe9

Python ascii编解码器无法解码字节0xe9,python,unicode,encoding,utf-8,decode,Python,Unicode,Encoding,Utf 8,Decode,我做了一些研究并找到了解决方案,但没有一个对我有效 这对我不起作用。我知道0xe9是字符。但我仍然不知道如何让它工作,这是我的代码 output_lines = ['<menu>', '<day name="monday">', '<meal name="BREAKFAST">', '<counter name="Entreé">', '<dish>', '<name icon1="Vegan" icon2="Mindful I

我做了一些研究并找到了解决方案,但没有一个对我有效

这对我不起作用。我知道0xe9是字符。但我仍然不知道如何让它工作,这是我的代码

output_lines = ['<menu>', '<day name="monday">', '<meal name="BREAKFAST">', '<counter name="Entreé">', '<dish>', '<name icon1="Vegan" icon2="Mindful Item">', 'Cream of Wheat (Farina)','</name>', '</dish>', '</counter >', '</meal >', '</day >', '</menu >']
output_string = '\n'.join([line.encode("utf-8") for line in output_lines])
output_lines=[''、''、''、''、''、''、''、''小麦奶油(Farina)''、''、''、''、''、'']
输出_字符串='\n'.连接([line.encode(“utf-8”)表示输出_行中的行])
这给了我一个错误
ascii编解码器无法解码字节0xe9


我尝试过解码,我尝试过替换“é”,但似乎也无法实现这一点。

encode
=将unicode字符串转换为bytestring

decode
=将bytestring转换为unicode

因为您已经有了一个bytestring,所以需要对其进行解码以使其成为一个unicode实例(假设您实际上正在尝试这样做)


您正在尝试通过TestRing进行编码:

>>> '<counter name="Entreé">'.encode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 20: ordinal not in range(128)

根据您想对行执行的操作,您可以在此处执行不同的操作,如果您只想按领事馆通常使用的
utf8
编码方式在领事馆中打印,您无需自行执行,因为您的字符串格式不是
unicode

>>> output_string = '\n'.join(output_lines)
>>> print output_string
<menu>
<day name="monday">
<meal name="BREAKFAST">
<counter name="Entreé">
<dish>
<name icon1="Vegan" icon2="Mindful Item">
Cream of Wheat (Farina)
</name>
</dish>
</counter >
</meal >
</day >
</menu > 

问题的一个简单例子是:

>>> '\xe9'.encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)

如果您确切地知道文件来自哪个编码,您的运气会更好。

您的代码示例无效,不会重现该问题<代码>输出行为空,因此循环不会执行任何操作。您的错误表示编码时出现解码错误,这通常表示您试图对已编码的数据进行编码。@MartijnPieters抱歉,我的示例代码中没有显示该数据已满,但它已满。我要补充一点,这仍然不是您实际的
输出线
。。。当然。。。在你尝试创建
输出字符串之前,你能不能
打印输出行
@JoranBeasley是的,但是
输出行
必须更长,所以我缩短了它你的数据已经被编码了,为什么你觉得需要再次编码?这也表明他正在使用python2x。。。因为在3x中,它不再试图隐式转换东西,当我将其更改为
output_string='\n时,您会得到一个更清晰的错误(+1 ofc)@JoranBeasley和Martijn。join([line for line in output_line])
我仍然会得到相同的错误?@iqueqiorio:您的列表中是否混合了Unicode和字节字符串?@JoranBeasley:或cp1252;如果编解码器是错误的,则两者都不会失败,但可能不会产生可读的输出。@iqueqiorio:那么web服务器可能已经向您提供了编解码器,或者XML格式本身可能已经将编解码器包含在元数据中。或者只是
“\n”。连接(输出线)
@JoranBeasley耶!对不起,我错过了你的答案!
>>> output_string = '\n'.join(output_lines)
>>> print output_string
<menu>
<day name="monday">
<meal name="BREAKFAST">
<counter name="Entreé">
<dish>
<name icon1="Vegan" icon2="Mindful Item">
Cream of Wheat (Farina)
</name>
</dish>
</counter >
</meal >
</day >
</menu > 
import codecs
f= codecs.open('out_file','w',encoding='utf8')
>>> '\xe9'.encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
>>> '\xe9'.decode('cp1252')
u'\xe9'
>>> u'\xe9'.encode('utf-8')
'\xc3\xa9'
>>>