日前刚刚解决的乱码问题,在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