乱码如下:
做 urlencode,编码成类似 %ab%cd 这种
POST请求 (getReader()获取)
解决方案:获取参数前设置字符输入流的编码
request.setCharacterEncoding("UTF-8");//设置字符输入流的编码
注意:肯定要先设置后获取参数。
GET请求(getQueryString()获取)
解决方案:和POST底层不一样,POST的解决方案不行。GET的解决方案也可以解决POST的问题,是通用的。
URL编码
1.将字符串按照编码方式转为二进制
2.每个字节转为2个16进制数并在前边加上%
//乱码原因: tomcat进行URL解码,默认的字符集ISO-8859-1 //1先对乱码数据进行编码:转为字节数组 byte[] bytes = xxx.getBytes(StandardCharsets.ISO_8859_1); //2字节数组解码 xxx = new String(bytes,StandardCharsets.UTF_8); System.out.println(xxx); //或者一行 xxx = new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
针对该问题,可以通过以下步骤解决:
1.在Tomcat配置文件conf/server.xml中,将URLEncoding参数设置为UTF-8,如下:
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8">
2.在Java代码中,使用URLDecoder对参数进行解码,示例如下:
String param = URLDecoder.decode(request.getParameter("param"), "UTF-8");
使用以上方法,可以解决Tomcat服务器在使用https访问时出现查询乱码的问题。
另外,如果使用jQuery的ajax发送请求时,也需要设置请求头的contentType为application/x-www-form-urlencoded;charset=UTF-8,示例如下:
$.ajax({
type: 'POST',
url: url,
data: data,
contentType: 'application/x-www-form-urlencoded;charset=UTF-8',
success: function (data) {
// do something
}
});
注意:以上方法仅适用于使用UTF-8编码的情况,如果服务器和页面使用的是其他编码格式,需要修改相应的参数和代码。