我在编写的脚本中遇到unicode问题。我已经浏览了互联网,包括这个网站,我尝试了很多东西,但我仍然不知道出了什么问题。
我的代码很长,但我会从中摘录:
raw_results = get_raw(args)
write_raw(raw_results)
parsed_results = parse_raw(raw_results)
write_parsed(parsed_results)
基本上,我得到的原始结果是XML格式,用UTF-8编码。编写RAW数据没有问题。但是编写解析数据是。所以我很确定问题出在解析数据的函数中。
我尝试了一切,但我不明白问题所在。即使这个简单的行也给我一个错误:
def parse_raw(raw_results)
content = raw_results.replace(u'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', u'')
UnicodeDecodeError:'ascii'编解码器无法解码字节0xd7 570:序数不在范围内(128)
理想情况下,我希望能够使用unicode并且没有任何问题,但我也没有更换/忽略任何unicode并仅使用常规文本的问题。我知道我没有提供完整的代码,但了解这是一个问题,因为它与工作有关。但我希望这足以让我得到一些帮助。
编辑:我的parse_raw函数的顶部:
from xml.etree.ElementTree import XML, fromstring, tostring
def parse_raw(raw_results)
raw_results = raw_results.decode("utf-8")
content = raw_results.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
content = "<root>\n%s\n</root>" % content
mxml = fromstring(content)
Edit2::我认为最好指出代码工作正常,除非有特殊字符。当它是100%英语时,没问题;无论何时涉及任何外国字母或重音字母,都会出现问题。
答案 0 :(得分:3)
raw_results
可能是str
个对象,而不是unicode
个对象。
raw_results.replace(u'...', ...)
会导致Python首先将str
raw_results
解码为unicode
。 Python2默认使用ascii
编解码器。 raw_results
包含位置570处的字节'\xd7'
,ascii
编解码器无法解码(即,它不是ascii字符)。
以下是如何发生此错误的演示:
In [27]: '\xd7'.replace(u'a',u'b')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 0: ordinal not in range(128)
如果raw_results
是unicode,那么ascii
就不会有静默解码,因此不会发生错误:
In [28]: u'\xd7'.replace(u'a',u'b')
Out[28]: u'\xd7'
如果您知道相应的编解码器,则可以通过明确解码raw_results
来解决此问题:
raw_results = raw_results.decode('latin-1')
latin-1
只是猜测。如果位置570处的字符是乘法符号,则可能是正确的:
In [26]: print('\xd7'.decode('latin-1'))
×
答案 1 :(得分:0)
感谢大家的投入和推动。我随后用一把细齿梳子翻了几百万次我的代码解决了我自己的问题,我找到了罪魁祸首。我现在已经解决了所有问题。
对于有类似问题的人,我有以下可以帮助您的信息:
codecs
模块编写文件。我的问题是,在某个时刻,我试图将unicode变成unicode。在另一个地方,我试图再次将普通ASCII转换为ASCII。因此,每当我解决了一个问题,另一个问题就出现了,我认为这是同样的问题。
将您的问题分解为......然后您可能会发现您的问题!