与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字符,但是当文件看起来是一个正确的UTF-8文件时,我不明白为什么QXmlStreamReader
期望找到latin-1
编码。标头中指定的编码。
SVG文件是使用matplotlib
(figure.savefig(...)
)生成的。
答案 0 :(得分:1)
问题是由于构造函数需要字节而不是字符串,解决方案是使用encode()
。
xml_stream = QtCore.QXmlStreamReader(svgData.encode())