2

XMLファイルの生成に使用するJavaRCPアプリケーションがJAXBあります。基本的にテキストボックスから入力(特殊文字も)を取得してxmlに保存し、xmlからアンマーシャリングして同じものを表示します。

ユーザーがコンソール出力(特殊文字を含む場合があります)をコピーしてテキストボックスに貼り付け、xmlに保存しています。

xml version = "1.0" encoding = "UTF-8"

jaxbバージョンはJDK1.6_21では2.1.10です。

マーシャリングを解除するときに、マーシャル解除の例外を受け取ります。

[org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x1b) was found in the element content of the document]

xmlをアンマーシャリングするときに無効なXML文字が見つかりました。このフォーラムでヘルプを検索したところ、リンクはほとんど見つかりませんでしたが、どちらにも解決策や回避策はありません。誰かが私を導くことができますか?

他の種類のエンコーディングを試しましたが、成功しませんでした。保存/マーシャリングする前に、その文字を同等の文字コードに置き換える必要がありますか?

以下は私の問題に近いリンクです: XMLファイルにエスケープ文字0x1bを保存するXML で無効な文字

4

2 に答える 2

4

この問題を説明するJAXB バグ レポートは、次の説明でクローズされました。

申し訳ありませんが、これは単なる XML の制限です。

XML では、制御文字は使用できません。http://www.w3.org/TR/REC-xml/#NT-Charで許可されている文字のリストを参照してください。

これは、 http://www.w3.org/TR/REC-xml/#sec-referencesをエスケープする問題ではありません。\u001C のような文字は、XML で有効な文字ではありません。これらの文字を含む文字列を転送する方法はありません。

オプションは、文字列を「XML セーフ」にする独自の文字列エンコーディング スキームを考え出すか、base64 などのバイナリ エンコーディングを使用するかのいずれかです。

したがって、これらの文字を XML で表現する方法はまったくありません。これらの文字列の正確な表現がアプリケーションにとって重要でない場合は、これらの文字を削除するか、プレースホルダーに置き換えることができます。それ以外の場合は、Base64 などの安全なエンコード スキームを使用してこれらの文字列をエンコードする必要があります。

于 2012-04-12T10:43:47.687 に答える
1

はい、CONTROL CHARを削除したくない場合は、文字をエスケープできます。
java.net.URLEncoder を使用してサーバー側でデータをエンコードし、クライアント側で java.net.URLDecoder を使用してデコードできます。
それは魅力のように機能します。私は同じ目的で使用し、正常に動作しています。

コードで 0x1b を手動で置き換えると、ある日、別の CONTROL CHAR が見つかります。したがって、データを保持したい場合は、エンコーダー/デコーダーを使用する方が良いと思います。それ以外の場合はリモートです。

ここで私の質問を参照できます: Illegal character - CTRL-CHAR

于 2012-04-12T10:59:28.143 に答える