Docker内不支持中文解决办法
在做一个项目的导出功能时,先在本地(Docker)创建好相应的Excel文件,然后写入数据,再将多个Excel文件打包成一个zip压缩包,接着上传到OSS,得到下载链接。下载到本地后打开发现压缩包内的文件名中的中文变成了??????,推断是java在Docker内创建中文文件名时,由于Docker内字符集并非UTF-8导致识别为不支持的字符。于是寻找修改容器内编码的解决方案。
一、查看当前使用的编码
root@6bc6bd3e52f2:/# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
二、查看当前支持的编码
root@6bc6bd3e52f2:/# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX
可以看到,当前环境使用了不支持的字符编码,我的修改方式是在启动Docker实例时通过环境变量LANG指定字符编码,如果是自己构建的镜像,则在构建时增加这个环境变量,运行时就可以省略指定了
docker run -d -e LANG=C.UTF-8 myapp
参考:https://www.jianshu.com/p/ecf13d88534b
参考:https://www.jianshu.com/p/6fe582ba6d3d