XML编码设置和特定字符集

时间:2013-11-13 18:20:48

标签: xml xml-parsing

我必须阅读一个大的XML文档(千兆字节),其中包含& #XX; 字符集,其中XX小于31.通常,我知道这些字符集(< 32)保留用于ASCII设备控制。

该文件的作者决定在文本中使用此charset并更改它是我手中的东西。

在声明xml文件的标头时,我尝试了除 UTF-8 之外的不同xml编码方案声明:<?xml version="1.0" encoding ="UTF-8"?>,但在尝试在我的XML中呈现它时没有成功解析器。

要使问题可重现且清晰,请考虑下面的简单xml文件(例如,在Fred名称后面有字符集):

<?xml version="1.0" encoding ="UTF-8"?> 
<TABLE> 
 <GRADES> 
 <STUDENT> Fred &#01; </STUDENT> 
 <TEST1> 1 </TEST1> 
 <TEST2> 2 </TEST2> 
 <FINAL> 3 </FINAL> 
 </GRADES> 
 <GRADES> 
 <STUDENT> Wilma </STUDENT> 
 <TEST1> 1 </TEST1> 
 <TEST2> 2 </TEST2> 
 <FINAL> 3 </FINAL> 
 </GRADES> 
</TABLE>

当我在不同的浏览器中阅读这些文件时,我收到错误:

  第22行第4行的

错误:xmlParseCharRef:无效的xmlChar值1

我知道可能的解决方案是预处理原始文件,查找并替换导致错误的字符,但有没有人知道解决此问题的任何其他方法?是否有任何特定的编码支持&amp; #XX; 字符集(XX <32)?

1 个答案:

答案 0 :(得分:2)

并非所有字符在XML 1.0中都是合法的。 (http://www.w3.org/TR/REC-xml/#charsets

如果您的工具支持XML 1.1,将它们切换到该模式将允许一些以前被禁止的字符(http://www.w3.org/TR/xml11/#charsets

通常的解决方案是不要尝试将控制字符放入XML文档中。相反,将二进制数据编码为十六进制或base64或其他一些文本表示,并让应用程序代码在需要时将其转换回二进制。