在servlet前后台交互时,我们会经常遇到中文乱码的问题,以下是我总结的解决方式:
一、交互过程中,参数乱码的解决:
1. 如果请求方式是“get”:
String userName= request.getParameter("userName");
//一般情况下,服务器默认的编码是“iso8859-1”,所以我们需要数据还原,然后再转换成UTF-8的形式
userName=new String(userName.getBytes("iso8859-1"),"UTF-8");
2. 如果请求方式是“post”:
//设置response的编码为utf-8
response.setCharacterEncoding("utf-8");
注:这种方式只对post有效!
总结:关于get与post乱码的解决方式不同,有兴趣的同学可以了解一下这两者请求方式的原理及区别。
二、交互过程中,PrintWriter乱码:
//1.设置response的编码为utf-8
response.setCharacterEncoding("utf-8");
//2.通知浏览器,以UTF-8的编码打开
response.setContentType("text/html;charset=UTF-8");
三、交互过程中,OutputStream乱码:
//1.通知浏览器,以UTF-8的编码打开
response.setContentType("text/html;charset=UTF-8");
//2.把数据以UTF-8编码的形式编码
response.getOutputStream().write(str.getBytes("utf-8"));
总结:乱码问题的出现,归根结底就是浏览器与服务器的编码不一致!还有特别注意,对于中文,常用的格式有GBK或UTF-8 ,我曾经就犯过一个错误,用"iso8859-1"的格式来显示中文,这肯定是不可能的!
由于自己能力有限,总结的不够全面,欢迎各位指正与补充!