以下代码导致众所周知的“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字符串,而不是文件。
我的问题有解决办法吗?感谢。
答案 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
编码可能不同。