【问题标题】:Xerces-c can't parse inverted question markXerces-c 无法解析倒置问号
【发布时间】:2013-03-04 15:21:32
【问题描述】:

我们有通过肥皂信封来自外部系统的 xml 消息。如果有一个编码头,那么我们使用它,否则我们提供一个 UTF-8。

最近我们收到了带有有趣字符的消息,例如倒置问号:¿、重音字母等

我们处理这些消息的系统无法解析它。我注意到这些 XML 的格式是 iso-8859-1 - 所以我尝试将其更改为 UTF-8 以查看解析器是否会发挥作用,但仍然没有运气。

知道 UTF-8 支持更广泛的范围,我在这里检查了 iso-8859-1 的字符集表:http://en.wikipedia.org/wiki/ISO/IEC_8859-1。好像支持倒问号,重音字母。

我遇到了困难,非常感谢一些帮助!谢谢!

在 x86 linux 机器上使用 xerces-c 2.7.0 和 gnu 编译器 3.4 编译的 C++/stl 代码。

【问题讨论】:

  • 通常,XML 编写器应该使用实体编码对这些字符进行编码...
  • 正如 leemes 所说,问题不在于您使用的字符集,而在于 XML 需要将许多特殊字符正确编码为 &something; 的事实。而不是作为代码中的文字。因此,无论是谁向您发送这些数据,基本上都是在向您发送无效的 XML。
  • @OriginalCliche:您是否真的将消息内容重新编码为 UTF-8,或者您只是将 xml 标头从“iso-8859-1”更改为“utf-8”?不仅仅是“...UTF-8 支持范围更广”,问题在于代码不同。倒置的问号可能显示为两个字节 (0xc2 0xbf),而在 iso-8859-1 中它是一个字节 (0xbf)

标签: c++ xml character-encoding xerces-c


【解决方案1】:

正如 cmets 所指出的,XML 阅读器不一定支持“特殊”字符。这不是xerces-c 独有的问题,但也发生在几个版本的 JavaScript XML 解析器中。我最终通过使用 nnn; 为我的问题解决了这个问题(例如,南美洲河流的名称,包含各种重音字母,这些字母在 UTF-8 中编码为多个字符)。命名法,基于此处的表格:http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent

【讨论】:

  • 感谢大家对此的意见。我认为将字符编码为与文字相反是很有意义的。我将与这些 XML 内容的提供者讨论,看看他们是否可以向我们发送正确编码的 XML 消息。如果不是 - 你们中是否有人知道任何可以帮助将文字转换为正确编码的 XML 的库?它会增加我们服务器的开销,但至少它会在与第三方供应商继续讨论的同时提供一些即时解决方案。再次感谢大家!
  • 如果您想要更多支持“XML 的供应商需要解决问题”,请尝试在浏览器中加载 XML [尝试 IE、FireFox 和/或 Chrome]。如果它变得“有趣”,那么你就知道它已经彻底坏了。 XML 的供应商很可能只使用过一种 XML 解析器变体,而这种变体恰好可以工作。您可能还想尝试使用 JavaScript,使用这个 `var parser=new DOMParser(); xmlContent = parser.parseFromString(xmlString, "text/xml");` 其中xmlString 是您的 XML 内容字符串。
猜你喜欢
  • 2013-03-04
  • 2011-05-31
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
相关资源
最近更新 更多