java

docker运行java程序创建文件中文文件名乱码

笔者的一次经历:通过容器镜像运行容器,并给定容器运行的脚本为statrt.sh,start.sh中为java -jar xxx.jar 。程序启动好后,java中的创建文件和解压zip文件得到的中文件名都是乱码,但是日志文件中记录的文件名又是正常的。思考良久,百思不得解,开始以为是容器系统的语言问题,但进入容器中使用locale看了是中文的utf-8,而且使用mkdir和touch创建中文文件都没问题。 经过多次实验,发现把容器启动好后,再进入容器中运行start.sh启动Java程序,这样就不会乱码了。所以我估计是 启动容器运行start.sh的时候未加载环境变量,所以干脆把环境变量设置放到start.sh中,果然问题解决。

start.sh如下:

#!/bin/bash
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh:en_US:en
cd /data
/jdk-21/bin/java -server -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8  --add-opens java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED -jar xxxx.jar

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm