SOAPボディは、UTF-8でエンコードされた二倍です
-
22-08-2019 - |
質問
私たちは、UTF-8を期待するWebサービスを使用します。私たちは、クライアント上で使用するフレームワークは、Apache Axis2のです。私たちは、Webサービスを呼び出し、SOAPボディには、UTF-8の文字列が含まれています。問題は、体が「二重のエンコード」であるように、それが思われることです。すなわち、私たちは文字「A」を持っています。 UTF-8で「A」のUTF-8表現は、しかし、我々が送信され(ダブル)エンコードされた値はC3 83 C2 A5である私たちのログに表示さC3 A5です。
誰もが似た問題を経験していますか?
解決
これは、Webサービスを呼び出しているか完全には明らかではありません。 Webサービスのメソッドは、単なる文字列を取るのか?もしそうなら、どのようなあなたの文字列は、Javaのように見えるのでしょうか? Javaでのすべての文字列はUTF-16でエンコードされている - あなたは、各バイトを取り、文字にそれを回すことにより、文字列にUTF-8進表現に変換している場合、それは問題です。
。あなたは方法はあなたのようなルックスを呼んでいる、そしてどのように大いに役立つだろうと、それを呼び出しているかを示すことができれば。
何が価値があるために、私は過去に問題ない非ASCII文字列でAxisを使用しました。 )
:私は強く、私は間違って証明するために喜んだものの、これは、あなたがそれを使用している方法ではなく、軸自体に問題である疑いがありますEDIT:あなたは、Webサービスを叩く前にあなたは、HTMLフォームのデータを受信する問題を持っているようにあなたのコメントに基づいて、それが聞こえます。ユーザーがフォームに「A」をタイプした場合、それはあなたがEclipseでデバッグするときあなたが見るべきものです。あなたのWebサービスに不正なデータを入れている場合、それはあなたが他の末尾に不正なデータを取得しているのも不思議ではありません。私はあなたが実行示唆 WireSharkのを表示するには、の正確のブラウザはの両方の観点から、あなたを送信しているもの生のバイトも、それは指定のエンコーディングどのようなコンテンツ。私の推測では、WebサーバーがISO-8859-1としてそれを扱っていますが、実際にはUTF-8であるということです。
フォームから正しく文字列を持ってたら、、私はあなたが何の問題は、Webサービスに渡すには全く存在しない見つけることができます疑います。