• servlet 解决中文乱码


    1 get请求request乱码

    在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
    解决办法:在接收到数据后,先获取request对象以ISo8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
    Tomcat8的版本中get方式不会出现乱码了,因为服务器对url的编码格式可以进行自动转换。

    tomcat8以下版本解决get中文乱码

    String username = req.getParameter("username");
    username = new String(username.getBytes("iso8859-1"), "utf-8");
    

    2 post请求request乱码

    在获取参数前设置setCharacterEncoding为utf-8

    req.setCharacterEncoding("UTF-8");
    String username = req.getParameter("username");
    

    3 response乱码

    方式一:

    resp.setCharacterEncoding("utf-8");    //设置 HttpServletResponse使用utf-8编码
    resp.setHeader("Content-Type", "text/html;charset=utf-8");    //通知浏览器使用utf-8解码
    

    方式二(优先使用):

    resp.setContentType("text/html;charset=utf-8");
    PrintWriter writer = resp.getWriter();
    riter.println("注册成功");
    

    4 使用例子

    package com.zjw;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/rs")
    public class RegisterServlet extends HttpsServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String username = req.getParameter("username");
            //tomcat8及以上版本不要使用转码,否则会乱码
    //        username = new String(username.getBytes("iso8859-1"), "utf-8");
            String password = req.getParameter("password");
            System.out.println(username + " " + password);
    
            PrintWriter writer = resp.getWriter();
            writer.println("注册成功");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //解决post中request中文乱码
            req.setCharacterEncoding("UTF-8");
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            System.out.println(username + " " + password);
    
            //响应给客户端
            //解决response中文乱码
            resp.setContentType("text/html;charset=utf-8");
            PrintWriter writer = resp.getWriter();
            writer.println("注册成功");
        }
    }
    
    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    第二阶段:冲刺2(个人界面的优化---头像上传)
    第二阶段:冲刺1(任务的分配)
    学习进度第12周
    读书笔记《人月神话》1
    学习进度第11周
    读书笔记《编程珠矶》3
    学习进度第10周
    第一阶段:冲刺10(完结)
    第十五周学习进度总结
    第十四周学习进度总结
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13891833.html
Copyright © 2020-2023  润新知