因Java项目运行于Linux之上,系统字符集为en_US.UTF-8(可通过locale命令查看),而项目Java启动参数设置字符集为GBK,通过上传功能上传的附件文件名称为GBK格式,因此在系统中文件名无法正常显示,修改终端显示字符集后可正常查看。
由上可确定需要对附件文件进行文件名称字符集转换。
Linux系统中有iconv与convmv分别提供文件内容与文件名称字符转换,本次仅使用convmv即可。
1. 拷贝源文件至临时目录
cp -a old_filename.pdf /tmp/
2. 转换成utf8
convmv -r -f gbk -t utf8 old_filename.pdf --notest --nosmart
3. 重命名
mv old_filename.pdf new_filename.pdf
4. 转回gbk
convmv -r -f utf8 -t gbk new_filename.pdf --notest --nosmart