Tomcat 乱码通常出现在 控制台日志、页面显示、表单提交、URL 参数 等场景。下面按常见原因 → 解决方式给你一个系统性的排查与解决指南。
在 JSP 页面顶部确保有:
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<meta charset="UTF-8">
Windows 控制台默认是 GBK,Tomcat 使用 UTF-8 输出。
logging.properties)编辑:
apache-tomcat/conf/logging.properties
修改或添加:
java.util.logging.ConsoleHandler.encoding = GBK
✅ 如果你用的是 IDE(如 IDEA / Eclipse),还要把 IDE 控制台编码设为 UTF-8 或 GBK 对应一致。
在 web.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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
非 Spring 项目可用:
request.setCharacterEncoding("UTF-8");
Tomcat 7 及以后,GET 参数在 URI 中解析。
修改:
conf/server.xml
找到 Connector:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
⚠️ 如果是 Tomcat 8+ 且使用了 useBodyEncodingForURI:
useBodyEncodingForURI="true"
在 Servlet 中:
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
确保:
utf8mb4jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8
-Dfile.encoding=UTF-8
如果你能告诉我:
我可以给你更精准的一行配置方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。