我正在尝试使用libxml2解析xml。但是,有时我会在其中获得代理对的代码点,这些代码对超出了http://www.w3.org/TR/REC-xml/#NT-Char中指定的范围 因此,我的libxml2解析器无法解析它,因此我收到错误。有人可以告诉我如何在使用libxml2解析XML时处理代理对。
我要解析的一个示例xml是:
<?xml version="1.0" encoding="UTF-8"?>
<message><body> ��</body></message>
答案 0 :(得分:3)
请注意,xD83D是一个高代理人。代理对包括高代理和低代理;两个高代理人彼此相邻并不是一个“替代对”,这是无稽之谈。
另请注意,在XML中表示非BMP字符的正确方法是组合字符的单个字符引用,例如𒂫
。在某些字符编码中需要将非BMP字符拆分为两个代理项,但在XML字符引用中不需要(或允许)它。 XML中的字符引用表示Unicode代码点,而不是特定于特定字符编码的数值。
如果您无法修复创建此错误XML的程序,那么最好的方法是使用脚本修复它,例如在Perl中查找无效的字符引用对,并用正确的XML表示替换它们。
答案 1 :(得分:0)
如果XML标准不允许这些字符,则解析器将抛出错误。在xml中包含这些字符的一种方法是将它们放在CDATA段中。它们用于转义包含字符的文本块,否则这些字符将被识别为标记。
<message><body> <![CDATA[���]]></body></message>
上面的xml将被正确解析。