1

クエリに utf-8 文字が含まれていない場合、コードは正常に機能します。utf-8 char が 1 つあるとすぐに、ETools は予期しない結果を提供します。たとえば、"trees"正しい結果が得られ、"bäume"(ドイツ語で木を意味する) は奇妙な結果が得られます。ETools は としてクエリを受け取り、"b%C3%A4ume"ではなく、正確にそれらの文字を含む正確なそのクエリを探しているようです"bäume"。いくつかのヘッダーパラメーターを設定すると問題が解決する可能性があると思いますが、そこで可能なパラメーターはわかりません。

String query = "some+query+with+utf8+chars";

HttpClient client = new DefaultHttpClient();
HttpPost request = new HttpPost();

List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("query", query));
parameters.add(new BasicNameValuePair("country", "web"));
parameters.add(new BasicNameValuePair("language", "all"));
parameters.add(new BasicNameValuePair("dataSourceResults", String.valueOf(40)));
parameters.add(new BasicNameValuePair("pageResults", String.valueOf(40)));
request.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8"));
request.setHeader("Content-Type", "application/x-www-form-urlencoded");
request.setURI("http://www.etools.ch/searchAdvancedSubmit.do?page=2");

MyResponse myResponse = client.execute(request, myResponseHandler);

request.reset();
client.getConnectionManager().shutdown();
4

1 に答える 1

3

少なくとも Content-Type に文字セットを追加する必要があります (デフォルトは latin1 です)。

request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

それが機能しない場合は、サーバーのバグである可能性があります。URL エンコードではなくmultipart/form-data( RFC 2388 )としてフォームを送信してみてください。使用できる例を含むStackOverflow の回答が既にあります。

于 2013-03-05T10:50:05.500 に答える