0

UTF-8 を想定する Web サービスを使用します。クライアントで使用するフレームワークは Apache Axis2 です。Web サービスを呼び出します。SOAP 本体には UTF-8 の文字列が含まれています。問題は、本文が「二重にエンコードされている」ように見えることです。つまり、'å' という文字があります。utf-8 の 'å' の utf-8 表現は C3 A5 ですが、送信された (double) エンコードされた値は C3 83 C2 A5 であることがログで確認できます。

誰かが同様の問題を経験しましたか?

4

1 に答える 1

1

Web サービスをどのように呼び出しているかは完全には明らかではありません。Web サービスのメソッドは文字列を受け取るだけですか? もしそうなら、あなたの文字列はJavaでどのように見えますか? Java のすべての文字列は UTF-16 でエンコードされています。UTF-8 バイナリ表現を各バイトを取得して文字に変換することで文字列に変換する場合、それが問題になります。

呼び出しているメソッドがどのように見えるか、どのように呼び出しているかを示すことができれば、それは大いに役立ちます。

価値があるのは、過去に問題なく非ASCII文字列でAxisを使用したことです。これは Axis 自体の問題ではなく、あなたの使用方法に問題があるのではないかと強く疑っていますが、間違っていることが証明されることを望んでいます :)

編集:あなたのコメントに基づいて、Web サービスにアクセスする前に、HTML フォーム データの受信に問題があるようです。ユーザーがフォームに「å」と入力した場合、Eclipse でデバッグすると、それが表示されます。Web サービスに不適切なデータを入力している場合、反対側で不適切なデータを取得していることは不思議ではありません。WireSharkを実行して、ブラウザが何を送信しているかを正確に確認することをお勧めします。未加工のバイト数と、ブラウザが指定しているコンテンツ エンコーディングの両方の観点からです。Web サーバーは ISO-8859-1 として扱っていると思いますが、実際には UTF-8 です。

フォームから文字列を正しく取得したら、それを Web サービスに渡すのにまったく問題がないことがわかると思います。

于 2009-05-19T06:55:20.263 に答える