Apache HttpClient - 在查询中使用utf-8字符向ETools.ch发送请求

时间:2013-03-05 09:39:11

标签: java apache utf-8 http-post apache-commons-httpclient

如果查询不包含任何utf-8字符,则代码可以正常工作。只要有一个utf-8字符,那么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();

1 个答案:

答案 0 :(得分:2)

您应该至少将您的字符集添加到Content-Type中(默认为latin1):

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

如果这不起作用,则可能是服务器错误。您可以尝试以multipart/form-dataRFC 2388)而非URL编码的形式提交表单。已经有一个StackOverflow answer示例,您可以使用。