WEB乱码问题汇总

WEB乱码问题汇总

产生的根本原因:

  • 数据的编码和解码使用的不是同一个字符集
  • 使用了不支持某个语言文字的字符集

如果是自己编写的项目,就把所有能看到的编码全都设置成UTF-8!🙂


HTMl乱码问题

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<!--告诉浏览器以UTF-8的解码方式打开-->
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

</body>
</html>

Tomcat控制台乱码

具体参考笔记中Tomcat -> Idea关联Tomcat -> Tomcat运行时部署


sout乱码问题,设置JVM加载.class文件时(编译)的解码模式

在Tomcat的虚拟机选项中添加参数 -Dfile.encoding=UTF-8


get方法提交乱码问题(请求行URI编码问题)

个别的Tomcat版本中,servlet获取参数时会存在乱码现象

可以通过更改配置文件Tomcat解码,使得和编码一致

Tomcat配置文件 -> server.xml中

默认的情况是没有的URIEncoding这条属性(默认的编码URI编码使用UTF-8)

1
2
3
4
5
6
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
URIEncoding="GBK"
/>

post方法提交乱码问题(请求体中编码问题)

个别的Tomcat版本中,servlet获取参数时会存在乱码现象

可以在Servlet-service中,设置请求体的解码字符集

req.setCharacterEncoding(“GBK”);


响应的乱码问题

在Tomcat10中,响应体的默认编码字符集使用的UTF-8

windows的Edge客户端的解码方式是GBK模式

更改后端编码(不推荐)

可以设置后端编码模式为GBK模式,就可以解决此问题

resp.setCharacterEncoding(“UTF-8”);

但我们及其不推荐使用这种方式去解决乱码问题,因为你并不能确定前端的解码方式是什么,不能以“后端适应前端” 🙃

设置响应头的参数:ContentType(推荐)

我们也可以通过响应头中ContentType的参数,来告诉前端以此方式进行解码

resp.setContentType(“text/html;charset-UTF-8”);

Tomcat版本问题

因为不同版本的Tomcat的后端编码模式也不尽相同,所以我们可以把编码和解码都设置一下

1
2
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");


WEB乱码问题汇总
http://blog.170827.xyz/2024/04/16/WEB乱码问题汇总/
作者
XIAOBAI
发布于
2024年4月16日
许可协议