2

JMS または MQ キューから XML メッセージを取得し、それを別の JMS キューに書き込む Java アプリケーションが Weblogic サーバー上で実行されています。アプリケーションが XML コンテンツを変更することはありません。メッセージの読み取りとキューへの書き込みには、BEA の XMLObject を使用します。

XML メッセージには、エンコーディング タイプの宣言が UTF-8 として含まれています。

XML に通常の ASCII 範囲外の文字 (たとえば、£ 記号など) が含まれている場合に問題が発生します。メッセージがキューから読み取られると、£ 記号がそのままであることがわかりますが、メッセージを宛先キューに書き込むと、£ 記号は失われ、代わりに £ に置き換えられます。

OS レベルの設定 (ロケール設定) を確認しましたが、問題ないようです。これが起こらないことを確認するために、他に何を確認する必要がありますか?

4

3 に答える 3

5

宛先キューに書き込むと、£ 記号が失われ、代わりに £ に置き換えられます。

これは、文字がUTF-8 として書き込まれていることを示していますが、ISO-8859-1 のようなシングルバイト エンコーディングであるかのように読み取られています。(U+00A0..U+00BF の範囲の任意の文字を UTF-8 としてエンコードし、ISO-8859-1 としてデコードすると、2 文字のシーケンスÃXになります。ここXで、 は元の文字です。 ) 受信 JMS キューのエンコーディング設定を確認します。

于 2008-11-06T19:08:06.113 に答える
3

、 、および ではなく、InputStream、、OutputStreamおよびを使用byte[]して XML ドキュメントを処理する必要があります。JMS の世界では、は よりも XML ペイロードに適しています。ReaderWriterStringBytesMessageTextMessage

すべての XML ドキュメントは、その文字エンコーディングを内部的に指定します。また、すべての XML 処理 API は、バイト ストリームを取得し、必要に応じて、使用する正しい文字エンコーディングを特定するように設計されています。テキストベースの API はそこにあるだけです…人々を混乱させるためだと思います! いずれにせよ、アプリケーションは、文字エンコーディングの問題を自分で管理しようとする (または、文字エンコーディングの問題を十分に理解していない状態でテキスト指向の API を使用する) のではなく、XML プロセッサに文字エンコーディングの問題を処理させるべきです。

于 2008-11-06T19:24:37.580 に答える
2

いくつかの詳細がなければ、指定されていないエンコーディングをオプションで取り、デフォルトで ISO-8859-1 に設定する方法があると思います。通常、InputStream/OutputStream と Reader/Writer の間を通過するものはすべてチェックします。

たとえば、OutputStreamWriterは省略可能なオプションのエンコーディングを受け取ります。

于 2008-11-06T16:04:43.240 に答える