centos环境下如何解决tomcat乱码问题
导读:CentOS 下 Tomcat 乱码排查与修复 一 系统层检查与修复 确认系统语言环境为 UTF-8:执行命令查看当前设置,例如输出应为 zh_CN.UTF-8 或 en_US.UTF-8。若不是,写入配置文件并重启系统或重新登录使其生效...
CentOS 下 Tomcat 乱码排查与修复
一 系统层检查与修复
- 确认系统语言环境为 UTF-8:执行命令查看当前设置,例如输出应为 zh_CN.UTF-8 或 en_US.UTF-8。若不是,写入配置文件并重启系统或重新登录使其生效。
示例:
echo $LANG
sudo tee /etc/locale.conf < < < “LANG=zh_CN.UTF-8”或 LANG=en_US.UTF-8
使配置生效:source /etc/locale.conf 或 reboot
- 终端工具(如 Xshell/MobaXterm)会话编码也需设置为 UTF-8,否则即使系统正确也会显示问号或方块。
- 若系统缺少中文语言包,可安装:sudo yum install -y kde-l10n-Chinese,再用 locale -a 确认是否存在 zh_CN.UTF-8。
二 Tomcat 层关键配置
- 在 conf/server.xml 的 上添加 URIEncoding=“UTF-8”,确保 GET/POST 请求参数按 UTF-8 解码:
- 在 bin/catalina.sh 设置 JVM 默认编码(推荐放在 “OS specific support” 注释之后):
export JAVA_OPTS=“$JAVA_OPTS -Dfile.encoding=UTF-8”
若通过系统服务(如 systemd)启动,确保服务脚本未覆盖 JAVA_OPTS,必要时改用 CATALINA_OPTS 或在服务单元中显式传入。 - 重启 Tomcat 使配置生效:
sudo systemctl restart tomcat 或
$CATALINA_HOME/bin/shutdown.sh & & $CATALINA_HOME/bin/startup.sh
三 应用层与数据库层
- Web 应用过滤器:对所有请求统一设置请求/响应编码。若使用 Spring,添加 CharacterEncodingFilter:
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
CharacterEncodingFilter
/*
- 静态资源与页面:确保 HTML、JSP 的 生效,容器或过滤器未错误覆盖。
- 数据库与连接串:库表/库级字符集使用 UTF-8/utf8mb4;JDBC URL 显式指定字符集,例如:
jdbc:mysql://localhost:3306/db?useUnicode=true& characterEncoding=UTF-8& connectionCollation=utf8mb4_general_ci
四 常见场景与快速修复
- 仅日志中文为问号:多为 JVM 编码与系统不一致。在 catalina.sh 增加 -Dfile.encoding=UTF-8 后重启;如使用服务脚本,优先用 CATALINA_OPTS 或在 systemd 单元中设置环境变量。
- 开机自启动乱码、手动脚本正常:自启动环境未继承用户环境变量。在自启动脚本(如 /etc/init.d/tomcat 或 systemd service)中显式导出 LANG=zh_CN.UTF-8 和 JAVA_OPTS/CATALINA_OPTS。
- GET 请求参数乱码:为 补上 URIEncoding=“UTF-8”。
- 上传/下载中文文件名乱码:除应用层外,确保反向代理/网关(如 Nginx)也使用 UTF-8,避免二次转码。
五 验证步骤
- 查看系统与终端:echo $LANG 应为 zh_CN.UTF-8 或 en_US.UTF-8;终端会话编码为 UTF-8。
- 查看 Tomcat 环境:ps -ef | grep tomcat 应能看到 -Dfile.encoding=UTF-8;server.xml 的 含 URIEncoding=“UTF-8”。
- 日志验证:tail -f $CATALINA_HOME/logs/catalina.out,输出中文应正常。
- 接口验证:发送包含中文的 GET/POST 请求(表单或 JSON),检查应用日志与返回内容是否一致。
- 文件验证:上传中文名文件后再下载,文件名应保持一致。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos环境下如何解决tomcat乱码问题
本文地址: https://pptw.com/jishu/754620.html
