编码乱码问题的自我理解
乱码原因:
请求URL要被浏览器进行编码encoder ----> 发送到服务器端再进行解码decoder --> 编码与解码方式不一致就造成了乱码问题。
从页面传入一个参数username = 帝峰
,进行处理乱码问题
@RequestMapping(path="testEncode")
public String testEncode(String username) throws Exception{
//直接输出结果是username = %E5%B8%9D%E5%B3%B0
System.out.println("username = " + username);
//查看浏览器请求域,发现username = 帝峰 这两个字被utf-8编码变成了%E5%B8%9D%E5%B3%B0
//我们可以通过URLDecoder.decode解码(UTF-8编码)来解决中文乱码问题
//String decodeName= URLDecoder.decode("%E5%B8%9D%E5%B3%B0","UTF-8");
String decodeName= URLDecoder.decode(username,"UTF-8");
//解码输出正常 username = 帝峰
System.out.println("username = " + decodeName);
return "requestmappingsuccess";
}
上面那种通过URLDecoder.decode()
进行解码显然不符合我们的需要,因为我们并不知道我们编码过程到底使用了哪一种编码,而且每次都这样写显得很麻烦。
我们来了解下,程序的执行流程【感觉有些问题,求指正】
jsp页面 —> 经过翻译(使用pageEncoding编码)变成servlet存储(jsp翻译之后是当成servlet来运行的) —> 通过
javac
编译(javac编译使用的是utf-8编码,占两个字节,也就是Unicode utf-8)变成servlet.class二进制文件 —> 交给tomcat服务器(tomcat默认使用iso8859-1编码,需要将其改为utf-8保证编码一致) —> 交给Controller等
程序,编码设置ontentType="text/html;charset=UTF-8"
为UTF-8 —> 到客户端 —> 再到jsp页面 —> 通过pageEncoding="UTF-8"
解码显渲染成页面展示给用户。
【上面归纳是我自己总结的,感觉有些错误,下面指出下我好改,萌新一位~】
解决乱码,最简单的就是保证执行步骤的每一步都是同一编码格式。也就是保证所有环境编码一致。
解决Tomcat服务器启动控制台输出乱码的最简单方法:
乱码情况截图
解决办法
修改tomcat目录下的conf目录的logging.properties
文件的第47行,将UTF-8改为GBK
【总结 - 疑惑】
原本的我一步步修改解决乱码,至于这个为什么一步解决,我也想知道,希望大佬们告诉我