日前刚刚解决的乱码问题,在windows本地调用文件上传接口时,中文名显示没问题,但是一旦文件上传到Linux服务器之后,就会出现中文乱码问题,如中文名变成???等,看了很久找到问题,以此记录一下解决过程。

1.服务器的编码问题,查看服务器编码,命令:locale

 

显示编码为支持中文编码的zh_CN.UTF-8,于是排除此可能

2.上传代码中没有处理,翻看代码对文件名进行处理

重新部署后还是没有效果

3.vue前端上传文件时Content-Type设置,以下是Content-Type传值介绍

选择multipart/form-data,并且加了编码格式

结果还是不行

4.tomcat编码是否设置

已经设置

5.docker镜像中编码,进入镜像命令:kubectl exec -it 容器名 bash -n pod名,查看编码:locale

编码为POSIX,此编码下中文好像会出现乱码情况,于是尝试更改为zh_CN.utf8

命令:
LANG=zh_CN.utf8

source /etc/profile 

注意:此命令是临时修改,若永久修改,在Dockerfile中添加一行ENV LANG zh_CN.utf8,然后重启容器

再测试上传,中文名正常显示,至此解决问题

备注:有些镜像进去以后,可以先执行locale -a,查看当前容器是否有zh_CN.utf8,如果没有,好像C.UTF-8也可以,如果不想用,可以安装一下zh_CN.utf8,在Dockerfile中添加一行

RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

Logo

更多推荐