python xml.sax解析带有突出字符的问题

时间:2011-11-24 17:38:58

标签: python xml encoding sax

以下代码导致众所周知的“UnicodeDecodeError:'ascii'编解码器无法解码”错误:

import xml.sax
import io
parser = xml.sax.make_parser()
parser.parse(io.StringIO(u'<a>é</a>'))

虽然

import xml.sax
parser = xml.sax.make_parser()
parser.parse(open('foo'))

有效(文件“foo”的内容为<a>é</a>)。

我需要在我的情况下解析XML字符串,而不是文件。

我的问题有解决办法吗?感谢。

1 个答案:

答案 0 :(得分:2)

文件包含字节,并且必须有一些编码来存储Unicode字符,因此请改用BytesIO对象:

#coding: utf8
import xml.sax 
import io 
parser = xml.sax.make_parser() 
parser.parse(io.BytesIO(u'<a>é</a>'.encode('utf8')))

注意:#coding: utf8指定源文件的编码; .encode('utf8')指定要存储在BytesIO对象中的Unicode字符串的编码。从技术上讲,使用非Unicode字符串:

#coding: utf8
parser.parse(io.BytesIO('<a>é</a>'))

也可以工作,因为字节字符串已经在源文件编码中,但它使意图更清晰。源文件和BytesIO编码可能不同。