真实原因为项目启动编码问题,将排查过程做记录
最近在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 &
重启项目后,文件可正常下载,问题解决,日志中的中文也可以正常打印。