ascii 编解码器无法解码字节 0xe9
ascii codec cant decode byte 0xe9
我做了一些研究并看到了解决方案,但 none 对我有用。
Python - 'ascii' codec can't decode byte
这对我不起作用。我知道 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])
这给我错误 ascii codec cant decode byte 0xe9
我试过解码,我试过替换“é”,但似乎也无法正常工作。
encode
= 将 unicode 字符串转换为 bytestring
decode
= 将字节串转换为 unicode
因为你已经有了一个字节串,你需要解码使它成为一个 unicode 实例(假设这实际上是你想要做的)
output_string = '\n'.join(output_lines)
print output_string.decode("latin1") #now this returns unicode
您正在尝试对字节串进行编码:
>>> '<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)
Python 试图提供帮助,您只能将 Unicode 字符串编码为字节,因此首先隐式编码 Python 解码,使用默认编码。
解决方案是不编码已经编码的数据,或者在尝试再次编码之前先使用合适的编解码器解码,如果数据被编码为不同的编解码器你需要什么。
如果您混合使用 unicode 和 bytestring 值,则只解码 bytestrings 或只编码 unicode 值;尽量避免混合类型。以下首先将字节字符串解码为 unicode:
def ensure_unicode(v):
if isinstance(v, str):
v = v.decode('utf8')
return unicode(v) # convert anything not a string to unicode too
output_string = u'\n'.join([ensure_unicode(line) for line in output_lines])
根据你想用你的线条做什么,你可以在这里做不同的工作,如果你只是想在领事中打印,因为通常领事使用 utf8
编码你不需要通过你的self 因为你的字符串格式不是 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 >
但是如果你想写入文件,你可以使用 codecs
模块:
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
不是 ascii 字符,这意味着您的字符串已经编码。你需要把它解码成python的unicode,然后再编码成你想要的序列化格式。
因为我不知道你的字符串是从哪里来的,所以我只是偷看了一眼python codecs,从西欧挑选了一些东西试了一下:
>>> '\xe9'.decode('cp1252')
u'\xe9'
>>> u'\xe9'.encode('utf-8')
'\xc3\xa9'
>>>
如果您确切知道文件来自哪种编码,那么您会很幸运。
我做了一些研究并看到了解决方案,但 none 对我有用。
Python - 'ascii' codec can't decode byte
这对我不起作用。我知道 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])
这给我错误 ascii codec cant decode byte 0xe9
我试过解码,我试过替换“é”,但似乎也无法正常工作。
encode
= 将 unicode 字符串转换为 bytestring
decode
= 将字节串转换为 unicode
因为你已经有了一个字节串,你需要解码使它成为一个 unicode 实例(假设这实际上是你想要做的)
output_string = '\n'.join(output_lines)
print output_string.decode("latin1") #now this returns unicode
您正在尝试对字节串进行编码:
>>> '<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)
Python 试图提供帮助,您只能将 Unicode 字符串编码为字节,因此首先隐式编码 Python 解码,使用默认编码。
解决方案是不编码已经编码的数据,或者在尝试再次编码之前先使用合适的编解码器解码,如果数据被编码为不同的编解码器你需要什么。
如果您混合使用 unicode 和 bytestring 值,则只解码 bytestrings 或只编码 unicode 值;尽量避免混合类型。以下首先将字节字符串解码为 unicode:
def ensure_unicode(v):
if isinstance(v, str):
v = v.decode('utf8')
return unicode(v) # convert anything not a string to unicode too
output_string = u'\n'.join([ensure_unicode(line) for line in output_lines])
根据你想用你的线条做什么,你可以在这里做不同的工作,如果你只是想在领事中打印,因为通常领事使用 utf8
编码你不需要通过你的self 因为你的字符串格式不是 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 >
但是如果你想写入文件,你可以使用 codecs
模块:
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
不是 ascii 字符,这意味着您的字符串已经编码。你需要把它解码成python的unicode,然后再编码成你想要的序列化格式。
因为我不知道你的字符串是从哪里来的,所以我只是偷看了一眼python codecs,从西欧挑选了一些东西试了一下:
>>> '\xe9'.decode('cp1252')
u'\xe9'
>>> u'\xe9'.encode('utf-8')
'\xc3\xa9'
>>>
如果您确切知道文件来自哪种编码,那么您会很幸运。