本文介绍了为什么在加载 XML 文件时 Qt 会丢失我的细空间 unicode 字符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have an XML document, part of which has the following in it:

<math display='block'><mtext>&#x2009;</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>&#x2009;</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>&#x2009;</mtext>"));
dom.setContent(&source, &reader);

这篇关于为什么在加载 XML 文件时 Qt 会丢失我的细空间 unicode 字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 10:12