我在我正在编写的脚本中遇到了unicode的问题。我已经搜索了互联网,包括这个网站,我尝试了很多事情,我仍然不知道什么是错的。
我的代码很长,但我将显示摘录:
raw_results = get_raw(args)
write_raw(raw_results)
parsed_results = parse_raw(raw_results)
write_parsed(parsed_results)基本上,我得到的是用XML编码的原始结果,用UTF-8编码。编写原始数据没有问题。但是写分析过的数据是。所以我很确定问题在解析数据的函数中。
我什么都试过了,我不明白问题出在哪里。甚至这条简单的行也给了我一个错误:
def parse_raw(raw_results)
content = raw_results.replace(u'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', u'')UnicodeDecodeError:'ascii‘编解码器不能解码位置为570的字节0xd7 :序数不在范围内(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%英语时,没有问题;每当涉及任何外国字母或重音字母时,问题就出现了。
发布于 2012-08-26 12:35:59
谢谢大家的投入和推动。后来,我用一把细齿的梳子检查了第一百万遍我的代码,解决了我自己的问题,我找到了罪魁祸首。我现在已经解决了我所有的问题。
对于任何有类似问题的人,我有以下信息可以帮助您:
codecs模块编写文件。我的问题是,在某一时刻,我试图将unicode转换为unicode。在另一个地方,我试图再次把正常的ASCII变成ASCII。因此,每当我解决一个问题时,另一个问题就出现了,我认为这是同一个问题。
把你的问题分成几部分..。然后你就会发现你的问题了!
发布于 2012-08-26 08:55:57
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'))
×https://stackoverflow.com/questions/12128780
复制相似问题