liesun

真实原因为项目启动编码问题,将排查过程做记录

最近在Spring Boot项目中做下载功能,将要下载的文件放在默认的 resource/static/template 路径下,打好包之后放在centos服务器上,结果在下载的时候提示找不到文件,排查时发现解压后的template中的中文文件名都变成了 ???,因此在下载的时候无法正确匹配路径导致无法下载。
根据网上的方法,按照以下步骤设置本地语言环境:

  • step1
vim /etc/locale.conf
LANG = "zh_CN.UTF-8"
  • step2
vim ~/.bashrc
#追加
export LANG=\'UTF-8\'
export LC_ALL=\'zh_CN.UTF-8\'
export LC_CTYPE=\'zh_CN.UTF-8\'
  • step3
source ~/.bashrc
  • step4
重启项目

经过一番操作,原来显示为 ??? 的文件显示中文名了,但是下载时依然提示找不到文件。然后使用echo $LANG ,locale命令确认系统中确实安装有中文语言包,并且设置了系统语言为中文。这时发现打印的日志中中文也变成了???,此时怀疑是jar包文件打包有问题,但是重新设置文件编码、打包参数为UTF8之后,问题依旧,故排除打包问题。

最后,检查项目启动脚本文件,在启动脚本中设置编码格式为UTF-8,即将原命令:

nohup java -server -Xms4096m -Xmx4096m -XX:PermSize=512m -jar /export/App/xxxx.jar > /dev/null 2>&1 &

修改为

nohup java -Dfile.encoding=utf-8  -server -Xms4096m -Xmx4096m -XX:PermSize=512m -jar /export/App/xxxx.jar > /dev/null 2>&1 &

重启项目后,文件可正常下载,问题解决,日志中的中文也可以正常打印。

总结:下载文件失败因中文文件路径在项目中不被识别,因此找不到文件。在项目启动时设置UTF-8编码可解决。

分类:

技术点:

相关文章: