Published on
322

Docker容器内中文文件显示乱码处理方案

Authors
  • avatar
    Name
    小辉辉
    Twitter

前言

项目开发中遇到一个很奇怪的问题,有个上传图片的功能,在内部开发环境中测试发现能够正常上传中文名的图片并能在页面中展示,但是换了云上环境后,同样的一套代码就发现上传的图片无法访问到。

进入容器后,发现文件是存在的,只是名字显示异常,中文的部分全部被转换为了带数字转译的值例如\345\678等字符。

处理方案

查询相关资料后才知道一个默认linux发行的系统使用的语言是posix,可以理解为ascii编码,可以通过输入local命令来确认。

如果要支持中文,只需要调整为中文语言即可,首先在容器内部运行locale -a命令来查看当前主机下支持的中文语言,一般有C.UTF-8zh_CN.UTF-8

接着在Dockerfile文件中设置以下环境变量来实现,具体值参考上述命令输出的结果,只需设置一种值便可以。

存在zh_CN.UTF-8情况:

ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.utf8

存在C.UTF-8情况:

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

最后重新编译镜像启动容器查看效果。