相信在做java web开发问题时 一定遇到过的中文乱码问题 我就暂且总结一下吧 不喜勿喷 欢迎大家一讨论 本文主要分为两个部分展开
出现乱码问题的本质就是编码器的不同 浏览器中的编码方式 是我们在头文件中自己定义的 一般为UTF-8 而Servlet分装我们的参数是基于ISO-8859-1的编码方式 所以我们在后台获
输出前台获取的中文值时 一般是问号
1、基于Servlet2.X+tomca7
此处我们再分两种 一种是服务器端输出的前台获取的值时乱码 二是前台输出后天设置中文是乱码
1.1 服务器端打印乱码
我们服务器端获取前台的请求 一般是get或者是post两种房式
对于post方式输出乱码
我们只需在post方法内的第一行 设置如下代码即可 此方法只对post有效
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); System.out.println("post = " + name); }
对于get方式输出乱码
由于get和post方法的数据分装不一样 我们此处的解决方法也不同
<pre name="code" class="java">protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); //获取前台的参数 byte[] names = name.getBytes("iso-8859-1"); //获取该参数的ISO-8859-1编码 name = new String(names,"utf-8"); //将iso-8859-1编码转为我们的目标编码 System.out.println("get = " + name); }
1.2 客户端打印乱码
同理 浏览器端打印乱码也是编码不用导致的 因此我们在相应请求时 应该设置响应页面的编码方式
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); //设置页面端的编码方式 response.getWriter().write("测试"); }
2、基于Servlet3.X + Tomcat1.8
至于servlet3.x的新特性 请参考本文 此不不再介绍 我们只介绍它与2.x在处理中文乱码的不同
我在第一次配置这样的环境时 还是按照值之前的那样 修改乱码的方式 对于post方法 依然有效 对于get方法却无效 我也是百思不得其解 后来我去掉编码 发现竟然可以正确的输出 即无须转码