场景描述

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 -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应用文件名乱码问题解决(文件下载和创建文件导致的文件名乱码)相关推荐

  1. java解压_Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)

    JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的 ...

  2. python存成csv文件时中文乱码_Python在向CSV文件写中文时乱码的处理办法

    前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode. 当list.tuple.dict里面有中文时,打印出来的是Unicode编码,这个是无解的. 对 ...

  3. php 上传乱码_如何解决php文件上传中文乱码问题

    php文件上传中文乱码的解决办法:首先打开相应的PHP文件:然后通过"iconv("UTF-8", "gbk",$name)"方法对文件名进 ...

  4. mysql导入数据库注释乱码_source命令 导入.sql文件时,中文乱码 或者是注释乱码...

    1.source命令 导入.sql文件时,中文乱码 或者是注释乱码 首先进入dos命令,进入mysql数据库,之后use 数据库:之后查看你的mysql数据库编码 如下命令:模糊查询变量charact ...

  5. android打开文件管理获取文件名,如何从android中的文件路径获取文件名

    我想从sdcard文件路径获取文件名.例如:/storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg 我已 ...

  6. java可以在C、E盘创建文件夹,但无法在D盘创建文件夹。

    java可以在C盘创建文件夹,但无法在D盘创建文件夹.总显示找不到文件路径 原因:D盘所开放的权限不足,把权限设置了一下就可以了

  7. linux里wps打开ppt乱码,打开wps的ppt文件的时候出现乱码怎么办 – 手机爱问

    2018-10-29 记事本打开文件乱码怎么办呢? 一.最简单的方法就是将你的txt文档的后缀名改掉,要看你改成原作者所编辑的格式,比如你原先是word文档格式,保存的时候保存的是txt格式,这样只能 ...

  8. linux 文件名的长度不得超过,linux对文件路径和文件名长度的限制

    linux对文件夹以及文件名的长度做了限制,以ubuntu为例,描述文件路径为:/usr/include/linux/limits.h #ifndef _LINUX_LIMITS_H #define ...

  9. linux解压文件名乱码,linux下解压zip文件时,文件名乱码的解决(转载)

    转自:http://blog.sina.com.cn/s/blog_6261f8690101c1gx.html windows下的zip文件,在linux下解压时,经常会出现文件名乱码的情况. 主要原 ...

最新文章

  1. commons-lang3-3.2.jar中的常用工具类的使用
  2. JSONP实现Ajax跨域请求
  3. OO Unit4 UML
  4. Logica实战与剖析(1)
  5. WCF添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。...
  6. visual studio code python插件下载_visual studio code 的必装推荐插件plugin, vscode, vsc
  7. tinkerpop mysql_图论数据库未来的发展方向?
  8. pycharm console日志如何输出到txt_日志记录——logging模块
  9. SAP License:实施ERP之后库存反而增加
  10. HDU2079 选课时间【母函数】
  11. 如何在思科交换机上配置Telnet远程登录
  12. 多智能体协同视觉SLAM技术研究进展
  13. dnf 卸载软件linux,Linux软件安装与卸载的基本概念
  14. ESP8266在arduino下开启路由转发实现wifi中继的方法小记
  15. c语言项目答辩演讲稿,关于竞选社团负责人的演讲稿
  16. bzoj 4742 [Usaco2016 Dec]Team Building
  17. 一个宠物商店的程序c语言,C语言-宠物商店管理系统-实训报告
  18. 段错误(核心已转储)错误及解决过程
  19. 苹果平替笔性价比高的,苹果ipad触控笔推荐
  20. 百变小鹿机器人金鸡奖登场,成为首个走上红毯的机器人

热门文章

  1. Java经典代码工具类
  2. 读论文,第十一天:Flexible Strain Sensors for Wearable Hand Gesture Recognition: From Devices to Systems
  3. fpga运算服务器_当FPGA也成为一种服务,你还在顾虑什么?
  4. 微型计算机原理计算机钢琴,用汇编语言编写计算机钢琴程序.PDF
  5. 日本计划建造世界上速度最快的超级计算机
  6. win10触控平板 如何禁掉IE10的手势控制
  7. 关于安全领域方向上学习的一点个人见解
  8. 各种标点符号的英文怎么说
  9. 数据结构实训之——哈夫曼树压缩文件和解压文件(C语言)
  10. 安卓分屏神器_手机端必备神器,一经推出轻松拥有过千万用户下载量!