首页 > 其他 > 详细

servlet 解决中文乱码

时间:2020-10-28 19:41:11      阅读:44      评论:0      收藏:0      [点我收藏+]

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("注册成功");
    }
}

servlet 解决中文乱码

原文:https://www.cnblogs.com/zjw-blog/p/13891833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!