为什么Qt在加载XML文件时会丢失我的精简空间unicode字符?

时间:2012-06-10 13:05:32

标签: xml qt unicode

我有一个XML文档,其中一部分包含以下内容:

<math display='block'><mtext>&#x2009;</mtext></math>

如果将其加载到Qt(特别是我发现此问题的Qt MathML小部件),QDomDocument对象将丢失unicode精简空格字符(U + 2009)。这个Python示例代码演示了这个问题:

from PyQt4.QtXml import *

d = QDomDocument()
d.setContent("<math display='block'><mtext>&#x2009;</mtext></math>")
print repr(unicode(d.toString()))

此代码的输出为:

u'<math display="block">\n <mtext/>\n</math>\n'

在精简空间停止丢失精简空间后插入额外的非空格字符。

这是我的错误,XML功能,还是Qt有错误?

1 个答案:

答案 0 :(得分:4)

来自QDomDocument's documentation

  

仅剥离由空格组成的文本节点,不会出现   在QDomDocument中。如果不需要这种行为,可以使用   setContent()重载,允许提供QXmlReader。

因此,这样您就不会丢失仅限空格的数据(例如C ++中的代码):

QXmlSimpleReader reader;
QXmlInputSource source;
QDomDocument dom;

source.setData(QString("<mtext>&#x2009;</mtext>"));
dom.setContent(&source, &reader);