解决JSP中文传参乱码问题
一、URL与Get请求
当TomCat不设置编码时,默认编码为ISO-8895-1,并不支持中文。
因为没有设置TomCat的编码,所以TomCat默认使用ISO-8895-1编码接收Get参数,导致乱码。
解决方法如下:
(1)修改TomCat配置
找到TomCat的配置文件“conf/server.xml”,在 <Connector port="8082" protocol="HTTP/1.1" 中加入 URIEncoding="utf-8"的编码集。
(2)使用String.getBytes(Stringdecode)方法和new String(byte[], decode)
String.getBytes(Stringdecode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示
new String(byte[],decode)实际是使用指定的编码decode来将byte[]解析成字符串
eg:
String user = new String(request.getParameter("user").getBytes("ISO-8895-1"),"utf-8")
即将获取回来参数以ISO-8895-1编码为字节数组,再将字节数组以utf-8的方式转为字符串。
二、Post请求
使用request.setCharacterEncoding(Stringdecode)方法
如果不指定编码,服务器默认使用ISO-8895-1编码。
在执行setCharacterEncoding()之前,不能执行任何getParameter()。而且该方法只对Post请求有效,对Get请求无效。
在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析提交内容,setCharacterEncoding()自然就无效。
参考资料:
http://blog.csdn.net/ocean20/article/details/6312106
http://blog.csdn.net/u010648555/article/details/50011987#comments
http://www.cnblogs.com/jiayouxiage/p/6120604.html
浙公网安备 33010602011771号