【发布时间】:2019-04-24 06:03:59
【问题描述】:
我有一个简单的 POST:
String url = "https://mysite";
try (CloseableHttpClient httpClient = HttpClients.custom().build()) {
URIBuilder uriBuilder = new URIBuilder(url);
HttpPost request = new HttpPost();
List<NameValuePair> nameValuePairs = new ArrayList<>(params);
request.setEntity(new UrlEncodedFormEntity(nameValuePairs, StandardCharsets.UTF_8.name()));
String encodedAuthorization = URLEncoder.encode(data, StandardCharsets.UTF_8.name());
request.addHeader("Authorization", encodedAuthorization);
try (CloseableHttpResponse response = httpClient.execute(request)) {
我必须支持 UTF-8 编码和编码UrlEncodedFormEntity 是不够的,但不清楚必须做什么,以下几个可用选项
使用uriBuilder.setCharset:
HttpPost request = new HttpPost(uriBuilder.setCharset(StandardCharsets.UTF_8)).build());
使用http.protocol.content-charset参数:
HttpPost request = new HttpPost(uriBuilder.setParameter("http.protocol.content-charset", "UTF-8").build());
或者只是添加Content-Type"` header:
request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
或者使用request.getParams():
request.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
request.getParams().setParameter("http.protocol.content-charset", "UTF-8");
或其他我忽略的明显解决方案?
【问题讨论】:
标签: java utf-8 character-encoding apache-httpclient-4.x