C++ Xerces-c可以';t解析倒问号

C++ Xerces-c可以';t解析倒问号,c++,xml,character-encoding,xerces-c,C++,Xml,Character Encoding,Xerces C,我们有通过soap信封来自外部系统的xml消息。如果有一个编码头,那么我们使用它,否则我们提供一个UTF-8 最近,我们收到了一些带有有趣字符的消息,比如倒问号:?,重音字母等等 我们处理这些消息的系统无法解析这些消息。我注意到这些XML的格式是iso-8859-1,所以我尝试将其更改为UTF-8,以查看解析器是否会发挥作用,但仍然没有成功 知道UTF-8支持更广泛的范围,我在这里检查了iso-8859-1的字符集表:。似乎是反问号,支持重音字母 我真的被这件事吓坏了,非常感谢你的帮助!谢谢 C

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

最近,我们收到了一些带有有趣字符的消息,比如倒问号:?,重音字母等等

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

知道UTF-8支持更广泛的范围,我在这里检查了iso-8859-1的字符集表:。似乎是反问号,支持重音字母

我真的被这件事吓坏了,非常感谢你的帮助!谢谢


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

正如评论所指出的,XML阅读器不一定支持“特殊”字符。这不是xerces-c的独有问题,但在几个版本的JavaScript XML解析器中也会发生。最后,我用&#nnn;术语,基于此处的表格:

通常,XML编写器应该使用实体编码对这些字符进行编码……正如Leems所说,问题不在于您使用的字符集,而是XML需要将许多特殊字符正确编码为&something;而不是作为代码中的文本。因此,无论是谁向您发送这些数据,基本上都是在向您发送无效的XML。@OriginalCliche:您是将消息内容重新编码为UTF-8,还是将XML头从“iso-8859-1”更改为“UTF-8”?这不仅是因为“…UTF-8支持更广泛的范围”,问题是代码不同。倒过来的问号可能显示为两个字节(0xc2 0xbf),而在iso-8859-1中它是一个字节(0xbf),感谢大家在这方面的投入。我认为字符的编码应该与文字相反,这是很有意义的。我将与这些XML内容的提供者讨论,看看他们是否可以向我们发送正确编码的XML消息。如果不知道,你们中有谁知道有哪个库可以帮助将文本转换为正确的编码XML?这会增加我们服务器的开销,但至少在与第三方供应商继续讨论时,它会提供一些即时解决方案。再次感谢大家!如果您希望更多支持“XML供应商需要解决问题”,请尝试在浏览器中加载XML[尝试IE、FireFox和/或Chrome]。如果结果是“有趣的”,那么你就知道它彻底坏了。很有可能XML的供应商只使用过一种XML解析器的变体,这种变体正好可以工作。您可能还想尝试使用JavaScript,使用这个`var parser=new DOMParser();xmlContent=parser.parseFromString(xmlString,“text/xml”);`其中
xmlString
是XML内容的字符串。