中文乱码处理专题

来源:互联网 发布:台风战机参数知乎 编辑:程序博客网 时间:2024/05/16 05:18

中文乱码处理专题

1.从浏览器获取服务器的数据

如果说在服务器中就是正确的编码,那么浏览器的解码方式,就设置成utf-8就可以了

response.setContentType("text/html;charset=utf-8");

2.从服务器获取浏览器的数据

 表单form

(1)  post

   在服务器端设置成浏览器端的编码方式。也就是说,不管你浏览器是什么编码方式提交的数据,我都按照你的编码方式获取数据

代码:  request.setCharacterEncoding(“utf-8”);

(2)  get

因为内容是通过请求行也就是url传递的,并没有封装到request对象中,所以上述方法失效

tomcat默认接受浏览器的编码是ISO-8859-1,也就是说浏览器提交的数据,tomcat按照ISO-8859-1

进行编码,如果服务器中需要使用这个数据的话,那么解码的方式就必须按照ISO-8859-1,然后把它转成utf-8的编码

进行输出,我们可以写一个工具类来实现并封装这个功能,以便更好地使用

当然:我们在提交表单的时候尽量用post提交

写一个工具类:

package com.ldl.utils;public class MyTools {   public static String getNewString(String str) {      String newString="";      try {          newString=newString(str.getBytes("iso-8859-1"),"utf-8");// 把iso-8859-1 转换成 utf-8      } catch (Exceptione) {          e.printStackTrace();      }       return newString;   }}   

超链接

< a href="http://www.sohu.com?name=王明">测试</a>

本质上就是通过get提交,处理方法同get

sendRedirect() 发生乱码

同get,比如在servletA中接受用户提交的用户名,然后将该用户名作为参数跳转到servletB,就可以直接这样写,这样在servletB中获取的就是正确的编码了

response.sendRedirect("servletB?username=request.getParameter("username").getBytes("iso-8859-1"),"utf-8");

补充:获取输出流的位置

request.setCharacterEncoding("utf-8");//设置服务器以utf-8的编码来接受response.setContentType("text/html;charset=utf-8");//设置浏览器以utf-8的编码来解析PrintWriter out =response.getWriter();
PrintWriter out =response.getWriter();request.setCharacterEncoding("utf-8");//设置服务器以utf-8的编码来接受response.setContentType("text/html;charset=utf-8");//设置浏览器以utf-8的编码来解析

上面这两种大家有没有看出来什么区别,如果没有那么你就会碰到跟我一样的困扰

我一开始的排版就是第二种,因为我的servlet的模板就是在post方法中调用get方法,然后get方法中直接获取输出流对象

我一开始就是中文乱码问题解决了好久,问了好多人都没有发现这个问题,后来才知道,应该先设置解码方式,然后再获取输出流,否则一开始就获取输出流,浏览器的解码方式还是没有变成utf-8。

0 0
原创粉丝点击