CentOS7 Java应用文件名乱码问题解决(文件下载和创建文件导致的文件名乱码)
2021/4/18 7:29:14
本文主要是介绍CentOS7 Java应用文件名乱码问题解决(文件下载和创建文件导致的文件名乱码),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
场景描述
spirngboot 部署的Java应用在测试服务器上,一直都运行得很好。
最近突然发生了乱码问题,同事已通过启动参数
java -Dfile.encoding=utf-8 -jar test.jar
修复了文件内容乱码问题但涉及到下载文件到服务器、或在服务器进行文件创建的时候,文件名字乱码,但内容不乱码的问题
开始排查
1.查看CentOS7 系统的locale字符集设置
$ locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
正常✔ , 服务器已经重启过生效(不知道怎么设置的请出门转左找找)
2.查看运行属性设置
异常✖!并非预期中的UTF-8
这里借助
arthas
查看到的属性, 也可以通过Java代码System.getProperty("sun.jnu.encoding")
打印处理继续第3步!
3. 指定启动参数sun.jnu.encoding
java -Dfile.encoding=utf-8 -Dsun.jnu.encoding=utf-8 test.jar
或用代码启动时设置
System.setProperty("sun.jnu.encoding","UTF-8")
启动完成后,查看到属性为:sun.jnu.encoding = UTF-8 ,但创建文件的文件名字还是乱码!
4.怀疑CentOS7 locale设置没生效
wget -c "https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwMjEwMTM0MDQ3MTU2?x-oss-process=image/format,png" -O /root/测试.png
下载一张图片到root目录,并且用中文命名。验证正常✔,中文名称显示
vim 测试.txt
直接创建一个中文名称文件。验证正常✔,中文名称显示
5. 排查点分析
目前情况
用CentOS7 直接创建文件或下载文件重命名都可以显示中文
用Java应用在服务器创建文件、下载文件到服务器就是文件名乱码。
sun.jnu.encoding
影响文件名乱码的设置已经正常显示为UTF-8
疑问
sun.jnu.encoding
有可能没生效到,虽然显示为UTF-8 属性值回顾第2点,为什么CentOS7 locale字符集生效了,但是
sun.jnu.encoding
为什么会显示为:ANSI_X3.4-1968 ??
6.最终解决
在启动Java应用的脚本上增加一个环境变量(取消sun.jnu.encoding设置)
export LANG=zh_CN.UTF-8 #不设置Dsun.jnu.encoding启动,验证环境变量LANG是否生效,导致sun.jnu.encoding变为UTF-8 java -Dfile.encoding=utf-8 -jar test.jar
成功解决✔!!!这时候不设置
-Dsun.jnu.encoding=UTF-8
启动,查看sun.jnu.encoding
就自动变为UTF-8了
备注
在/etc/profile增加
export LANG=zh_CN.UTF-8
并且souruce /etc/profile
依然无效,在启动Java应用的脚本加上才正常
这篇关于CentOS7 Java应用文件名乱码问题解决(文件下载和创建文件导致的文件名乱码)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Maven资料入门指南
- 2024-11-16Maven资料入门教程
- 2024-11-16MyBatis Plus资料:新手入门教程与实践指南
- 2024-11-16MyBatis-Plus资料入门教程:快速上手指南
- 2024-11-16Mybatis资料入门教程:新手必看指南
- 2024-11-16MyBatis资料详解:新手入门与初级实战指南
- 2024-11-16MyBatisPlus资料:初学者入门指南与实用教程
- 2024-11-16MybatisPlus资料详解:初学者入门指南
- 2024-11-16MyBatisX资料:新手入门与初级教程
- 2024-11-16RESTful接口资料详解:新手入门指南