Java 为什么发送POST请求和接收POST请求之间的字符编码不匹配?

Java 为什么发送POST请求和接收POST请求之间的字符编码不匹配?,java,servlets,apache-httpclient-4.x,Java,Servlets,Apache Httpclient 4.x,我有一个Javaservlet,它接收POST请求,其中的数据应该用UTF-8编码,但它似乎是用ISO-8859-1编码的 为了进一步澄清,以下是一些代码示例: 在Java中,使用Apache HttpClient发送PostRequest时: PostMethod postMethod = new PostMethod(url); postMethod.getParams().setContentCharset("UTF-8"); String bar = "\u200B\u200B\u20

我有一个Javaservlet,它接收POST请求,其中的数据应该用UTF-8编码,但它似乎是用ISO-8859-1编码的

为了进一步澄清,以下是一些代码示例:

在Java中,使用Apache HttpClient发送PostRequest时:

PostMethod postMethod = new PostMethod(url);
postMethod.getParams().setContentCharset("UTF-8");

String bar = "\u200B\u200B\u200B\u200B\u200B\u200B\u200B";
postMethod.addParameter("body", bar);

HttpClient httpClient = new HttpClient();
int status = httpClient.executeMethod(postMethod);
在接收端(在HttpServlet的
doPost
方法中):

在上面的示例中,当我有一个发送请求的调试断点时,
bar.getBytes(StandardCharsets.UTF_8)=[-30,-128,-117,-30,-128,-117,-30,-128,-128,-117,-30,-128,-117,-117,-30,-128,-117]
。但是,当我在接收端检查字符串时,即使请求被设置为UTF-8编码,如果执行
bar.getBytes(StandardCharsets.ISO_8859_1)
,我也只能得到相同的结果

所以基本上,当我发送字符串时,它被作为UTF-8放入参数中,但它被作为ISO读取。为了获得正确的处理值,我必须使用
String utf8String=new String(bar.getBytes(StandardCharsets.ISO\u 8859\u 1)、StandardCharsets.UTF-8)


为什么会这样?有没有我遗漏的配置?应该注意的是,发送方和接收方在不同的tomcat实例中,可能在同一台机器上,但不一定是这样。

您已经尝试过了吗

postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")

你已经试过了吗

postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")