gpt4 book ai didi

java - 如何确定 HttpClient PostMethod 的参数中包含 UTF-8 字符串?

转载 作者:行者123 更新时间:2023-12-01 20:26:22 26 4
gpt4 key购买 nike

在我们的 web 应用程序中,我们必须通过 HttpClient 向网络上的端点发送 POST 请求,该端点将接收该请求并对其进行一些处理。我们在字符编码方面遇到了问题,并且我很难找到问题的答案。

我们在发送请求时使用了 postMethod.getParams().setContentCharset("UTF-8") 方法,但在接收端,字符似乎仍然采用 ISO 编码8859-1。我已经确定了这一点,因为当我检查接收端的字符串时,一旦我按照 https://stackoverflow.com/a/16549329/1130549 中找到的步骤操作,其中的垃圾字符就会消失。 。我需要在发送端采取任何额外的步骤来确保我实际上按照预期以 UTF-8 写入字符吗?我们现在所做的就是将 postMethod.addParameter(paramKey, paramValue) 与 native String 对象一起使用。

编辑:这是我们如何发送 POST 请求的一个非常简单的示例。无论如何,这些值是从 XMLBeans 对象中获取的。

PostMethod postMethod = new PostMethod(url);
postMethod.getParams().setContentCharset("UTF-8");
postMethod.addParameter("key1", "value1");
postMethod.addParameter("key2", "value2");

HttpClient httpClient = new HttpClient();
int status = httpClient.executeMethod(postMethod);

最佳答案

编辑更简单的解决方案是对值进行编码

postMethod.addParameter("key1", URLEncoder.encode("value1","UTF-8"));

要正确编码 UTF-8,您可以使用 StringEntityNameValuePair 执行不同的操作,例如:

try (CloseableHttpClient httpClient = HttpClients.custom().build()) {
URIBuilder uriBuilder = new URIBuilder(url);
HttpHost target = new HttpHost(uriBuilder.getHost(), uriBuilder.getPort(), uriBuilder.getScheme());
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("key1", "value1"));
nameValuePairs.add(new BasicNameValuePair("key2", "value2"));
String entityValue = URLEncodedUtils.format(nameValuePairs, StandardCharsets.UTF_8.name());
StringEntity entity = new StringEntity(entityValue, StandardCharsets.UTF_8.name());
post.setEntity(entity);
httpClient.execute(target, post);

关于java - 如何确定 HttpClient PostMethod 的参数中包含 UTF-8 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58915333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com