WEB乱码问题汇总

WEB乱码问题汇总

产生的根本原因:

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

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


HTMl乱码问题

<!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)

    <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的后端编码模式也不尽相同,所以我们可以把编码和解码都设置一下

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