我有一个Java Servlet,它接收带有应该以UTF-8编码的数据的POST请求,但它似乎是以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
方法中:]:
String body = new String(req.getParameter("body").getBytes(), req.getCharacterEncoding());
在上面的示例中,当我有一个发送请求的调试断点时,bar.getBytes(StandardCharsets.UTF_8) = [-30, -128, -117, -30, -128, -117, -30, -128, -117, -30, -128, -117, -30, -128, -117, -30, -128, -117, -30, -128, -117]
。但是,当我在接收端检查字符串时,即使请求设置为UTF-8编码,如果执行bar.getBytes(StandardCharsets.ISO_8859_1)
,我也只会得到相同的结果。
所以基本上,当我发送字符串时,它以UTF-8的形式被放入参数中,但是以ISO的形式被读出。为了获得正确的值进行处理,我必须使用String utf8String = new String(bar.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF-8)
为什么会这样?我在某处缺少某些配置吗?应该注意的是,发送者和接收者在不同的tomcat实例中,可能在同一台机器上,但不一定。
我有一个Java Servlet,它接收带有应该以UTF-8编码的数据的POST请求,但它似乎是以ISO-8859-1编码的。为了进一步说明,下面是一些代码示例:...
您已经尝试过吗?
postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")