问题描述
我有一个 XML 文档,其中一部分包含以下内容:
I have an XML document, part of which has the following in it:
<math display='block'><mtext> </mtext></math>
如果将其加载到 Qt(特别是我发现此问题的 Qt MathML 小部件)中,QDomDocument 对象将丢失 unicode 细空格字符 (U+2009).这个 Python 示例代码演示了这个问题:
If this is loaded into Qt (specifically the Qt MathML widget where I found this problem), the QDomDocument object loses the unicode thin space character (U+2009). This Python example code demonstrates the problem:
from PyQt4.QtXml import *
d = QDomDocument()
d.setContent("<math display='block'><mtext> </mtext></math>")
print repr(unicode(d.toString()))
这段代码的输出是:
u'<math display="block">\n <mtext/>\n</math>\n'
在细空格后插入一个额外的非空格字符以防止细空格丢失.
Inserting an extra non-space character after the thin space stops the thin space being lost.
这是我的错误、XML 特性还是 Qt 有错误?
Is this my mistake, an XML feature, or does Qt have a bug?
推荐答案
来自 QDomDocument 的文档:
仅由空格组成的文本节点将被剥离并且不会出现在 QDomDocument 中.如果不需要这种行为,可以使用允许提供 QXmlReader 的 setContent() 重载.
这样你就不会丢失只有空白的数据(例如在 C++ 中):
So this way you do not lose the white space only data (example is in C++):
QXmlSimpleReader reader;
QXmlInputSource source;
QDomDocument dom;
source.setData(QString("<mtext> </mtext>"));
dom.setContent(&source, &reader);
这篇关于为什么在加载 XML 文件时 Qt 会丢失我的细空间 unicode 字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!