Get方式请求过来的数据在浏览器地址栏上就已经经过编码了
tomcat收到这些数据,getParameter()默认使用ISO-8859-1去解码,应先让文字回到ISO-8859-1对应的字节数组,然后再按UTF-8组拼成字符串。
例如:
String fileName= request.getParameter(“fileName”);
fileName= new String(fileName.getBytes(“ISO-8859-1”),“UTF-8”);
事实证明,当System.out.println(fileName)时,控制台输出的fileName依然是乱码,而且会报空指针异常:
解决方案:
1、直接在tomcat/conf/server.xml设置,以后get请求过来的数据永远都是UTF-8编码
添加代码:URLEncoding=“UTF-8”
2、将上述代码的ISO-8859-1改为UTF-8
改为:
String fileName = request.getParameter(“fileName”);
fileName= new String(fileName.getBytes(“UTF-8”),“UTF-8”);
**我的理解是:**getParameter()默认使用ISO-8859-1去解码,说明这些文字已经是ISO-8859-1这种编码方式的数据,而getBytes(“UTF-8”)将原来的ISO-8859-1编码方式的数据转换成UTF-8编码方式的字节数组,最后通过String构造组拼成字符串(求探讨)
Post方式请求过来的数据:在getParameter()之前设置请求体里面的文字编码。
即request.setCharacterEncoding(“UTF-8”);
之前设置的原因:因为在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效
注意:此设置方式对解决Get请求的数据乱码问题无效
原因:GET方法提交表单时,提交的内容在URL中,一开始就已经按照编码分析提交内容,所以此设置方式对解决Get方式请求的数据乱码问题无效
关于HttpServletRequest中Get方式和Post方式的中文乱码问题
未经允许不得转载:爱站程序员基地 » 关于HttpServletRequest中Get方式和Post方式的中文乱码问题