发布网友
共1个回答
热心网友
在一次服务器重启后,线上Springboot jar包启动的日志出现了乱码,添加了-Dfile.encoding=utf-8 参数后日志恢复正常,然而在代码中使用new File操作时,中文路径却无法正确识别,file.exists()返回false。
为了解决日志乱码,我们在启动脚本中加入了-Dfile.encoding=utf-8,但这并未解决路径问题,表明这不是问题的根源。推测可能是系统层面的编码问题。
在Linux系统中,确认了编码设置为UTF-8,文件也是UTF-8格式,第三方工具检查确认无误。尝试修改vi /etc/sysconfig/i18n(CentOS7.x版本未发现此文件,而在/etc/locale.conf中),并调整编码至UTF-8,但配置更改并未生效。怀疑可能是代码层面的问题,但考虑到重启后jar包未被替换,可能性较低。
为解决路径问题,我们尝试在代码中对路径进行UTF-8编码,但问题依然存在。深入排查后,发现jar包进程的实际编码是ANSI_X3.4-1968,而非预期的UTF-8。
问题的根源在于jar包的编码方式与系统环境不匹配。由于jar包是通过systemctl启动,通过grep env /sbin/service命令查看服务启动时的环境变量配置,发现LANG环境变量未被正确设置。
解决方法是编辑服务启动配置文件,vim /sbin/service,将LANG="$LANG" 添加到env -i 后,重启操作系统。重新运行服务后,日志乱码和中文路径问题得到了解决。