在我的系统上,一段与Python 2兼容的代码不适用于Python 3。

f = open("plotwidget.svg")
svgData = f.read()
xml_stream = QtCore.QXmlStreamReader(svgData)


这将引发以下错误:

UnicodeEncodeError 'latin-1' codec can't encode character '\u2212' in position 12688: ordinal not in range(256)


该字符确实不是ASCII字符,但是我不明白为什么QXmlStreamReader期望在文件看起来像是标头中指定编码的正确UTF-8文件时找到latin-1编码。

SVG文件是使用matplotlibfigure.savefig(...))生成的。

最佳答案

造成此问题的原因是,构造函数需要字节而不是字符串,解决方法是使用encode()

xml_stream = QtCore.QXmlStreamReader(svgData.encode())

关于python - QXmlStreamReader引发UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45207989/

10-11 16:28