JavaWeb开发中Request中文乱码的解决
(自己学习总结,勿喷。):
针对POST
一开始就设置:
request.setCharsetEncoder(“UTF-8”)我擦
或者针对于每一个getParameter(key),都这样写:
String username = request.getParameter(key);
byte [] buf = username.getBytes(“ISO8859-1”);
int len = buf.length;
username = new String(buf,0,len,“utf-8”);
第一种方式:
第一次调用getParameter(key),就会去解析request中代表请求体的字节缓冲区,默认调用的是getCharset()方法,得到的是"ISO8859-1",按照"ISO8859-1"的字符集编码去解析的,最终得到的数据就是乱码,getParameter得到的也就是乱码。而request.setCharsetEncoder("UTF-8")就是设置request的字符及编码为utf-8,getCharset方法得到的就是utf-8,最终按照utf-8编码解析字节缓冲区,所得到的就是正常的中文
第二种方式:
在已经乱码的情况下,通过默认编码(iso8859-1)得到字节数组,再重新使用utf-8进行编码.
针对GET请求:
tomcat8及以上版本内部已经解决.
tomcat8以下:
因为在请求地址里面不能有中文,所以请求地址会URL编码将中文转化为例如"%5E%6A"的格式,而get请求我们的请求参数是放在了请求地址中的,所以也会被URL编码。那么我们调用getParameter(key)得到的就是"%5E%6A"的形式,所以就应该利用java.net包下的 URLDecoder类的静态方法decode(URL编码的字符串, 解码用的字符集) 进行解码
所以GET请求解决中文乱码就是:
URLDecoder.decode(getParameter(key), "utf-8") .
欢迎大佬修正…