Python unicode麻烦

时间:2012-08-26 08:45:23

标签: python unicode python-2.6

我在编写的脚本中遇到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%英语时,没问题;无论何时涉及任何外国字母或重音字母,都会出现问题。

2 个答案:

答案 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。因此,每当我解决了一个问题,另一个问题就出现了,我认为这是同样的问题。

将您的问题分解为......然后您可能会发现您的问题!

相关问题