【发布时间】:2017-09-20 10:23:58
【问题描述】:
这令人震惊和令人沮丧,请帮忙。
>>> a1 = '\xe5' # type <str>
>>> a2 = u'\xe5' # type <unicode>
>>> ord(a1)
229
>>> ord(a2)
229
>>> print a2.encode('utf-8')
å
>>> print a1.encode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
如果a1和a2的值相同,为什么不能都编码?
我必须使用在a1 表单上返回 unicode 数据的外部 API,这使它毫无用处。 Python 显然坚持 <str> 类型化的字符串必须只包含 ASCII 字符,否则它拒绝对它们进行编码。它完全破坏了我的应用程序。
【问题讨论】:
-
您是否尝试使用编码的字符集对其进行解码?
-
嗯...原来数据被编码为 latin-1。我无法根据我能找到的任何技术细节来合理化正确的猜测。我不知道 Python 或终端或其他什么决定使用 latin-1。我只是做了一个幸运的猜测。
-
它没有。它是由生成它的任何东西以这种方式编码的。