Python中使用xml.sax解析器处理带有重音字符的问题

4
以下代码会导致众所周知的“UnicodeDecodeError: 'ascii' codec can't decode”错误:
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个回答

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>'))

由于字节字符串已经使用源文件编码,因此 b"example" 也可以正常工作,但这样会使意图更加清晰。源文件和 BytesIO 编码可能是不同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接