我必须阅读一个大的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  </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)?
答案 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或其他一些文本表示,并让应用程序代码在需要时将其转换回二进制。