从 tomcat8 以后,采用 utf-8 编码,就不会出现中文乱码了,tomcat8 之前一直用 ISO-8859-1 编码,当然我们也可以修改它的配置文件 conf/server.xml,添加URIEncoding="UTF-8"可以解决 get 请求的中文乱码。

aced403079474a28867da0095cdf2295-image.png

1. 请求

浏览器上输入中文,传参到后台服务器,出现的乱码问题。

1.1 get 请求提交数据到后台出现的中文乱码

// 参数列表拼接到地址栏的后面,中文进行 utf-8 编码后存到 request 对象中

// request 对象的默认编码是 iso-8859-1,不支持中文

// 解决办法:先使用 iso-8859-1 获取编码后的中文,再使用 utf-8 进行解码

String username = request.getParameter("username");

username = new String(username.getBytes("iso-8859-1"), "utf-8");

System.out.print(username);

1.2 post 请求提交数据到后台出现的中文乱码

// 设置缓冲区的编码为 utf-8

request.setCharacterEncoding("utf-8");

String username = request.getParameter("username");

System.out.print(username);

2. 响应

服务器输出数据到浏览器,浏览器上显示中文乱码的解决方案。

2.1 字节流输出中文可能会出现乱码

// 设置浏览器以 utf-8 的编码打开

response.setHeader("content-type", "text/html; charset=utf-8");

response.getOutputStream().write("你好,世界!".getBytes("utf-8"));

2.2 字符流输出中文一定会出现乱码

A:第一种解决办法:设置缓冲区的编码为 utf-8,并且设置浏览器的编码为 utf-8

response.setHeader("content-type", "text/html; charset=utf-8");

response.setCharacterEncoding("utf-8");

response.getWriter().print("你好,世界!");

B:第二种解决办法:

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

response.getWriter().print("你好,世界!");

  • Web
    99 引用 • 295 回帖 • 7 关注
  • 经验
    18 引用 • 110 回帖
感谢    关注    收藏    赞同    反对    举报    分享