这是代码
A = "Diga sí por cualquier número de otro cuidador.".encode("utf-8")
我收到此错误:
'ascii'编解码器无法解码位置6中的字节0xed:序数不在范围内(128)
我尝试了许多编码失败。
修改
我在开头已经有了这个
# -*- coding: utf-8 -*-
更改为
A = u"Diga sí por cualquier número de otro cuidador.".encode("utf-8")
无效
答案 0 :(得分:4)
您使用的是Python 2吗?
在Python 2中,该字符串文字是一个字节串。您正在尝试对其进行编码,但您只能编码Unicode字符串,因此Python将首先尝试使用默认的“ascii”编码将字节字符串解码为Unicode字符串。
不幸的是,您的字符串包含非ASCII字符,因此无法将其解码为Unicode。
最佳解决方案是使用Unicode字符串文字,如下所示:
A = u"Diga sí por cualquier número de otro cuidador.".encode("utf-8")
答案 1 :(得分:3)
错误讯息:'ascii' codec can't decode byte 0xed in position 6: ordinal not in range(128)
表示第7个字节为0xed
。这是UTF-8序列的第一个字节,用于某些(可能是CJK)高序Unicode字符(这与报告的事实完全不一致),或者它是您在Latin1或cp1252中的i-acute编码。我打赌cp1252。
如果您的文件是以UTF-8编码的,则违规字节不是0xed
而是0xc3
:
Preliminaries:
>>> import unicodedata
>>> unicodedata.name(u'\xed')
'LATIN SMALL LETTER I WITH ACUTE'
>>> uc = u'Diga s\xed por'
What happens if file is encoded in UTF-8:
>>> infile = uc.encode('utf8')
>>> infile
'Diga s\xc3\xad por'
>>> infile.encode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 6: ordinal not in range(128)
#### NOT the message reported in the question ####
What happens if file is encoded in cp1252 or latin1 or similar:
>>> infile = uc.encode('cp1252')
>>> infile
'Diga s\xed por'
>>> infile.encode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 6: ordinal not in range(128)
#### As reported in the question ####
在代码开头有# -*- coding: utf-8 -*-
并不能神奇地确保您的文件以UTF-8编码 - 这取决于您和您的文本编辑器。
行动:
答案 2 :(得分:1)
将代码放在第一行:
# -*- coding: utf-8 -*-
答案 3 :(得分:0)
您应该通过在代码的最开头添加以下行来指定源文件的编码(假设您的文件以UTF-8编码):
# Encoding: UTF-8
否则,Python将采用ASCII编码并在解析过程中失败。
答案 4 :(得分:0)
您可能使用普通字符串,而不是unicode字符串:
>> type(u"zażółć gęślą jaźń")
-> <type 'unicode'>
>> type("zażółć gęślą jaźń")
-> <type 'str'>
所以
u"Diga sí por cualquier número de otro cuidador.".encode("utf-8")
应该有效。
如果你想默认使用unicode字符串,请输入
# -*- coding: utf-8 -*-
在脚本的第一行。
另见docs。
P.S。在上面的例子中它是波兰语:)
答案 5 :(得分:0)
在代码的第一行或第二行中,输入注释:
# -*- coding: latin-1 -*-
有关支持的符号列表,请参阅: http://en.wikipedia.org/wiki/Latin-1_Supplement_%28Unicode_block%29
答案 6 :(得分:0)
也许这就是你想要做的事情:
A = 'Diga sí por cualquier número de otro cuidador'.decode('latin-1')
不要忘记在代码的开头添加# -*- coding: latin-1 -*-
。