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");