【发布时间】: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