java实现Servlet的中文乱码处理

HttpServletRequest:这个对象封装了客户端提交过来的一切数据

客户端提交数据给服务端(这里指的是在网页输入内容提交servlet处理时,在servlet控制台的输出乱码),如果数据中带有乱码,可参照如下方法解决:

  1. 如果是GET请求(若无乱码则无需修改)
    String name=request.getParameter("username");
            String password=request.getParameter("password");
            System.out.println("名字是:"+name+",密码是:"+password);
            //get请求过来的数据,在url上已近经过编码了,所以我们渠道的是乱码
            //tomcat收到这些数据后,getParameter默认使用"ISO-8859-1"去解码
            //先让文字回到"ISO-8859-1"对应的字节数组,然后按"utf-8"拼接字符串
            String username=new String(name.getBytes("ISO-8859-1"),"utf-8");
            System.out.println(name+"="+username);

    或者可以在tomcat目录下conf下的server.xml中8080端口下添加     URIEncoding="UTF-8"

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"
    			   URIEncoding="UTF-8"/>
  2.  如果是POST请求(若无乱码则无需修改),一定要写在POST方法获取数据之前设置字符编码(第一句就行)

            //这个说的是设置请求体里面的文字编码,get请求设置无效,因为get请求的数据在地址栏中,请求体是空的
            request.setCharacterEncoding("utf-8");
    
            String name=request.getParameter("username");
            String password=request.getParameter("password");
            System.out.println("名字是:"+name+",密码是:"+password);

HttpServletResponset:负责返回数据给服务端:输出文字两种方法都可以,但是输出文件就不能用字符流了。

        //以字节流的方式写出
        response.getOutputStream().write("kook你".getBytes());
        //向客户端输出,以字符流的方式写出
        PrintWriter pw=response.getWriter();
        pw.write("okokokk好好好");

中文乱码的解决:

  1. 如果是字符流输出(有时候设置“utf-8”输出还是乱码,可以改变一下浏览器的编码格式):
            //这里写出去的文字,默认使用ISO-8859-1,我们可以指定写出去的时候,用什么编码写
            //  1.指定输出到客户端时,这些文字使用 UTF-8  编码
            response.setCharacterEncoding("UTF-8");
            //  2.直接规定浏览器看到这份数据的时候,使用什么编码来看
            response.setHeader("Content-Type","text/html,charset=UTF-8");
            response.getWriter().write("大家好啊");
  2. 如果是字节流输出 

    //以字节流输出
            /*
             *      如果想让服务器端出去的中文,能够在客户端正常显示,只需要确保一点
             *      出去的时候使用的编码,和客户端看这份数据的时候使用的是编码是一致的
             *      默认情况下getOutputStream()输出使用的是UTF-8的码表
             *      如果要改变编码,"我是个中国人".getBytes()在括号中填写编码
             */
            //设置浏览器响应的数据类型是html文本,并告知浏览器,使用UTF-8来编码
            response.setContentType("text/html;charset=utf-8");
            response.getOutputStream().write("我是个中国人".getBytes());

猜你喜欢

转载自blog.csdn.net/weixin_42547717/article/details/84147333