【问题标题】:How to Parse &#DDDDD;&#DDDDD; (Unicode Image) with XML Parser如何解析 &#DDDDD;&#DDDDD; (Unicode 图像)与 XML 解析器
【发布时间】:2016-02-19 02:50:53
【问题描述】:

我遇到了一个奇怪的问题,我将 XML 数据作为 INPUT 获取,例如

<D\DATA>
<\DATA_CONTENT="&lt;p&gt;&#55357;&#56842;&lt;/p&gt;&lt;p&gt;&#55357;&#56832;&lt;/p&gt;&lt;p&gt;&#55357;&#56865;&lt;/p&gt;"/>
<\/DATA>

并尝试使用 libxml2 进行解析

xmlReaderForMemory(inputData.c_str(),inputData.length(),NULL,NULL,NULL)

问题是xml解析器可以t process the parsing because of "&" image string in sample input is "&#55357;&#56865;' is UTF-8 encoded UNICODE or HTML data so data is correct, but problem is "&" is not possible in XML Data. it shoulde be changed as "&amp;" but i cant改变输入数据。

数据是在android系统中使用 TransformerFactory() 生成的,并且能够通过 JAVA 上的 DOM 进行解析

但我需要在 C/C++ 中解析它。所以我尝试使用 libxml2 解析 xml 数据,但是......没有办法解决这个问题..

请帮助我并提前感谢

【问题讨论】:

  • 你的数据甚至不是有效的 XML,甚至不是它的一部分,不管那是什么。
  • 这只是示例数据而不是完整数据,如果我将 DDDDD 数据更改为普通文本,则可以解析..

标签: xml parsing unicode libxml2


【解决方案1】:

&amp;#55357; (U+D83D) 和 &amp;#56842; (U+DE0A) 是 Unicode surrogates 的数字字符引用,它们是 not allowed in XML。因此,当 libxml2 拒绝此类字符引用时,它会做正确的事情。

您应该通过首先组合代理来更改生成此无效 XML 的代码部分。例如,代理对 D83D DE0A 是代码点 U+1F60A: SMILING FACE WITH SMILING EYES 的 UTF-16 编码。您的 XML 生产者应该输出 &amp;#x1F60A; 或十进制的 &amp;#128522;

【讨论】:

  • 谢谢!我正在检查如何将 Unicode Surrogte() 更改为 Unicode(U+1F60A)
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 2013-01-31
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
相关资源
最近更新 更多