0

ApacheHttpClientを使用してJSONを返すRESTfulサービスを呼び出しています。

問題は、異なるプラットフォームでコードを実行すると、応答のエンコードで異なる結果が得られることです。

これが私のコードです:

GetMethod get = new GetMethod("http://urltomyrestservice");
get.addRequestHeader("Content-Type", "text/html; charset=UTF-8");
...
HttpResponse response = httpexecutor.execute(request, conn, context);
response.setParams(params);
httpexecutor.postProcess(response, httpproc, context);
StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer);

これをOSXで実行すると、応答で張惠妹などのアジアの文字などが正常に返されます。しかし、これをLinuxサーバーで実行すると、同じコードで文字が???として表示されます。

LinuxサーバーはJava1.6.0_26-b03を実行しているAmazonEC2インスタンスです私のローカルOSXは1.6.0_29-b11を実行しています

どんなアイデアも本当にありがたいです!!!!!

4

2 に答える 2

1

のjavadocを見るとorg.apache.commons.io.IOUtils.copy(InputStream, Writer)

プラットフォームのデフォルトの文字エンコーディングを使用して、バイトを InputStream から Writer の文字にコピーします。

そのため、クライアントに応じて異なる答えが得られます(これがあなたが見ているものです)

また、Content-Type通常は応答ヘッダーです (POST または PUT を使用していない場合)。Accept-Charsetサーバーはそれを無視する可能性があります (ただし、リクエスト ヘッダーのほうが運がいいかもしれません)。

応答ヘッダーのコンテンツ タイプの charset-encoding パラメータを解析し、それを使用して応答を に変換する必要があります (実際に必要Stringな場合)。StringCommons HTTP には、それを自動的に行うコードがあると思います。そうでない場合でも、Spring はRESTTemplate間違いなくそうします。

于 2012-06-12T12:50:24.460 に答える