Apache的HttpClient的 - POST请求ETools.ch与查询UTF-8字符(Ap

2019-10-17 18:53发布

如果查询不包含任何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();

Answer 1:

您应该添加您的字符集为内容类型至少(默认为latin1的):

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

如果不工作,它可能是一个服务器错误。 你可能想尝试提交表单作为multipart/form-data ( RFC 2388 ),而不是URL编码。 已经有一个StackOverflow的答案与您可以用一个例子。



文章来源: Apache HttpClient - post request to ETools.ch with utf-8 chars in the query