全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 6 分钟 ✍️ juanwangdev

乱码问题原因

乱码问题的本质是编码和解码使用不同的字符集。

编码解码原理

Java
发送端:字符串 → 字节(编码)
接收端:字节 → 字符串(解码)

乱码产生原因:

  1. 编码和解码使用不同字符集
  2. 编码格式未正确指定
  3. 多次编码/解码

请求乱码

POST请求乱码

原因:请求体未指定编码,Tomcat默认使用ISO-8859-1解析

XML
// 解决方案:设置请求编码
request.setCharacterEncoding("UTF-8");

或配置CharacterEncodingFilter:

XML
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

GET请求乱码

原因:URL参数在Tomcat connector解析时使用错误编码

Java
<!-- Tomcat server.xml配置 -->
<Connector URIEncoding="UTF-8" ... />

或手动转换:

Java
String name = request.getParameter("name");
String correctName = new String(name.getBytes("ISO-8859-1"), "UTF-8");

响应乱码

原因:响应未指定编码,浏览器使用默认编码解析

properties
// 设置响应编码
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");

数据库乱码

原因:数据库连接或表编码不一致

text
jdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8

编码对比

编码字符范围特点
ISO-8859-1单字节西欧字符Tomcat默认编码
GBK中文字符双字节,中文专用
UTF-8全球字符可变字节,国际化

常见乱码场景

场景原因解决方案
POST表单乱码请求体编码错误CharacterEncodingFilter
GET参数乱码URL编码错误Tomcat URIEncoding配置
响应页面乱码响应编码错误setContentType设置编码
数据库乱码连接编码错误JDBC URL指定编码

统一使用UTF-8编码,从数据库、服务器到前端保持一致。

要点总结

  • 乱码本质:编码和解码字符集不一致
  • POST乱码:请求体编码错误,使用过滤器解决
  • GET乱码:URL解析编码错误,配置Tomcat URIEncoding
  • 响应乱码:设置contentType包含charset

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring MVC @ResponseBody注解
下一篇 → 统一编码处理
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库