2

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

该文件的作者决定在文本中使用这个字符集,并且改变它是我无法控制的。

在声明 xml file: 的标头时,我尝试了不同的 xml 编码方案声明,超越UTF-8<?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>

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

第 4 行第 22 列的错误:xmlParseCharRef:无效的 xmlChar 值 1

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

4

1 回答 1

3

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

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

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

于 2013-12-27T17:41:58.090 回答