Lazy loaded image
BugRecord
🐞docker部署SpringBoot项目乱码
Words 505Read Time 2 min
2025-9-8
2025-9-7
type
status
date
slug
summary
tags
category
icon
password
原文

问题

服务端校验用户输入的密码不能为中文 但是客户端输入中文是可以在测试环境通过正则表达式的
  1. First 首先本地环境是没有问题的 确认为测试环境有问题
  1. 添加监控代码 打印日志获取参数的编码
发现都是乱码 说明该字符串无法转换为utf-8,担心是logger 日志底层有做处理(然而并没有) 改为控制台打印
System.out.println("console 输出新密码为:" + mebPasswordModifyReq.getNewPassword());
发现还是乱码
  1. 抓包请求发现 content-type application/json;charSet=utf8
  1. 编写方法获取字符串的代码
  1. 监控日志打印出来为utf-8 确认为项目环境问题
  1. 查看pom文件 添加以下代码
再次部署项目 继续乱码
  1. 添加代码 获取当前系统的字符集编码logger.error("file.encoding is " + System.getProperty("file.encoding"));惊喜出现了 监控日志发现进入容器 输入echo $LANG 发现为空go on敲入jinfo -flags process_id 输出为
  1. 敲入 jinfo -sysprops process_id 查看java 系统各项参数发现file.encoding = ANSI_X3.4-1968至此排查完毕 确认为乱码的问题是由于未指定java系统正确的编码引起的
解决办法:修改dockerfile文件脚本 添加-Dfile.encoding=utf-8 指定起字符集监控日志发现 中文恢复正常显示
总结:乱码问题的定位较复杂 需排查系统环境 项目编码 请求编码 启动脚本 jvm系统参数等 乱码的本质就是编码与解码采用的编码方式不一样
延伸阅读:
java系统参数sun.jnu.encoding为文件名的字符编码集
 
上一篇
命令行执行shell脚本成功,但crontab执行失败
下一篇
MySQL、Redis缓存一致性问题

Comments
Loading...
Catalog