xml解析错误错误解组因以下原因失败:解析错误:字符引用“ ”是无效的XML字符

时间:2012-06-08 15:06:52

标签: java xml xml-parsing

  

块引用

解析器因:°¾¾°°°°°°Oh Oh Oh Oh Oh Un Un Un Un Un Un Un Un Un Un Un Un Un Un Un Un Un Un Un Un 解析错误:

Character reference "�" is an invalid XML character.

converted internally to �˰ھ ���� �Ÿ��Ͱ��ƿ� �� ���� �ϰ� �ִ°�? by parser while parsing 

在character角色上有效失败。

现在我的问题是我必须让它通过什么选项?我尝试将数据放入cdata部分,但仍然失败 我使用旧的 castor.jar和xerces.jar与jdk 1.4 ,我无法改变。 添加更多详细信息 - 大文件中的xml数据类似于数据>数据>等数据>现在使用sax解析器处理此文件。 在strartElement上我们再次开始收集数据,在endElement上我们尝试使用

解组整个数据
   Events dom = (Events) um.unmarshal(new StringReader(xmlChunk.toString()));

正如您所知,此时数据将由sax解析器转换为实体,因此我们有效地编组数据,如上所示以数字显示。

我能够处理相同的文件而不改变jdk或win7框中的代码。并在内部将其转换为不同的字符实体。
在win7上处理相同的代码工作正常!!!内部正在改变的字符实体是 -

converted internally to ¾Ë°Ú¾î¿° ¾ó¸¶³ª °Å¸±°Í°°¾Æ¿° ³Ê Áö±Ý ÇÏ°í Àִ°Å? by parser while parsing 

。现在我在这里失去了它没有意义......

1 个答案:

答案 0 :(得分:4)

假定的实体�是DBA3,它位于Unicode代理字符范围内。这意味着您的输入要么是UCS-16 / UTF-16,要么是乱码。如果这是UCS-16,则字符实体表示是无效的XML。 XML规范说:

  

Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

  

使用字符引用引用的字符必须与Char的生成匹配。


更改XML解析器的平台不太可能解决此问题。

我会查看您用于处理输入文本的机制(以确保您没有使字符编码错误)并生成字符引用。在创建后者时,您需要测试代理对“代码单元”,并将它们组合成代码点,然后从代码点生成字符引用。


另一件事是,如果你试图使用CDATA的字符引用将二进制数据嵌入到XML文档中......不要!它不会起作用。您必须将二进制数据转换为Hex或Base64或类似的东西,并在文档中嵌入

相关问题