0

引用符

パーサーが ¾Ë°Ú¾î¿° ¾ó¸¶³ª °Å¸±°Í°°¾Æ¿° で失敗し、メッセージ Unmarshaling failed due to :
Parsing Error :

Character reference "�" is an invalid XML character.

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

³ 文字で効果的に失敗します。

今私の質問は、それを通過させるために必要なオプションは何ですか? cdata セクションにデータを入れようとしましたが、それでも失敗します。
古いcastor.jar と xerces.jar を jdk 1.4 で使用していますが、これは変更できません。詳細を追加するには - 大きなファイルには、¾Ë°Ú¾î¿° ¾Ë°Ú¾î¿° ¾ó¸¶³ª °Å¸±°Í°°¾Æ¿°data> のような xml データがあります。このファイルは 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 パーサーのプラットフォームを変更しても、これが修正される可能性はほとんどありません。

入力テキストの処理 (文字エンコーディングが間違っていないことを確認するため) と文字参照の生成に使用されたメカニズムに注目したいと思います。後者を作成するときは、サロゲート ペアの「コード単位」をテストし、それらをコード ポイントに結合してから、コード ポイントから文字参照を生成する必要があります。


もう 1 つは、CDATA の文字参照を使用してバイナリ データを XML ドキュメントに埋め込もうとしている場合です。うまくいきません。バイナリ データを Hex や Base64 などに変換し、それドキュメントに埋め込む必要があります。

于 2012-06-08T15:36:04.747 に答える