加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux编码 Linux字符集正常

发布时间:2022-10-24 12:49:57 所属栏目:Linux 来源:
导读:  问题点

  线上某次服务器器重启后,导致jar包启动的日志乱码,添加 -Dfile.encoding=utf-8 后日志输出正常,但是存在new File 取不到中文路径的情况。file.exists()返回false;

  排查思路解决日志乱
  问题点
 
  线上某次服务器器重启后,导致jar包启动的日志乱码,添加 -Dfile.encoding=utf-8 后日志输出正常,但是存在new File 取不到中文路径的情况。file.exists()返回false;
 
  排查思路解决日志乱码问题
 
  启动脚本中 java -jar命令添加-Dfile.encoding = utf-8 解决日志乱码的问题,但是中文路径依旧取不到文件,应该不是该问题导致。判断还是系统层面编码问题。
 
  linux系统编码排查
 
  查看linux系统的编码是UTF8编码,文件的编码也是utf-8的编码
 
  echo $LANG
  复制代码
  查看文件的编码格式采用第三方工具:文件格式也是UTF-8且正常展示,则说明不是文件编码问题
 
  convmv
 
  看到别的博客上需要修改vi /etc/sysconfig/i18n文件linux编码,改为LANG="zh_CN.UTF-8",但是我的线上服务器是CentOS7.x版本的,没有找到这个文件,后来发现centos7.x版本的文件在/etc/locale.conf 这个文件中;其中的编码也是UTF8
 
  后续按照网上的思路修改系统配置文件 /etc/profile添加字符集编码后也不生效。考虑是否代码问题(可能性很低,因为重启linux后jar包并没有重新替换还是原来的jar包)
 
  java路径要转编码
 
  尝试通过代码方式对文件路径进行编码,使用和系统统一的UTF-8方式
 
  String path = URLDecoder.decode(fileAbsolutePath, "UTF-8");
  File file = new File(path);
  复制代码
  问题依旧没有解决,还是无法取到文件路径。
 
  jar包编码问题
 
  通过命令jinfo 进程号 查看java进程的详细信息,发现jar进程的编码有问题,用的是ANSI_X3.4-1968。
 
  发现问题的根本原因是jar包的编码方式不对导致,因为jar是通过systemctl方式启动,查看查看服务启动工具对环境变量的使用grep env /sbin/service
 
  将LANG="$LANG" 配置在env -i 后面,最后的结果如下所示,操作过程:
 
  编辑service文件 vim /sbin/service
 
  在env -i 后面加上 LANG="$LANG" 。
 
  添加后 重启操作系统(reboot)
 
  重新运行服务即可解决 日志文件乱码和中文路径取不到的问题
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!