0

块引用

解析器在 ¾Ë°Ú¾î¿° ¾ó¸¶³ª °Å¸±°Í°°¾Æ¿° 失败,消息 Unmarshaling failed due to :
Parsing Error :

Character reference "�" is an invalid XML character.

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

有效地在 ³ 字符上失败。

现在我的问题是我必须通过什么选择?我尝试将数据放入 cdata 部分,但仍然失败。
我在jdk 1.4 中使用旧的 castor.jar 和 xerces.jar ,我无法更改。添加更多详细信息 - 大文件中有 xml 数据,例如 ¾Ë°Ú¾î¿° ¾ó¸¶³ª °Å¸±°Í°°¾Æ¿°data> 现在使用 sax 解析器处理此文件。在 strartElement 上,我们再次开始收集数据,在 endElement 上,我们尝试使用

   Events dom = (Events) um.unmarshal(new StringReader(xmlChunk.toString()));

正如您所知道的,此时数据将通过 sax 解析器有效地转换为实体,我们正在对数据进行编组,如上图所示。

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

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

. 现在我在这里不知所措,这没有任何意义......

4

1 回答 1

4

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

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

使用字符引用引用的字符必须与 Char 的产生式相匹配。


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

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


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

于 2012-06-08T15:36:04.747 回答