现象
docker容器内服务用代码执行svn指令报错,Can’t convert string from ‘utf-8’ to native encoding
思考
能不能通过代码内对编码处理解决,但是最终发现,直接在命令行执行svn指令也同样报错,故问题应该不在代码内,应该是环境问题
问题重现
- 提交内容包含中文时,使用svn log
- 修改文件包含中文时,使用svn diff
解决
-
在docker-compose所在目录执行
sudo docker-compose exec 【服务名】 svn diff 【svn远程地址】 --revision 【旧版本】:【新版本】 --username 【用户名】 --password 【密码】 --no-auth-cache
发现报错 -
查看容器内locale有哪些字符集
sudo docker-compose exec 【服务名】 locale -a
-
我本地看了下,有utf-8的,只有C.UTF-8,考虑到部署配置通用性,就用C.UTF-8
-
修改docker-compose,添加环境变量
environment:
- LC_CTYPE=C.UTF-8
sudo docker-compose down
sudo docker-compose up -d
其他
非docker容器的话
- 直接执行
locale -a
即可查看已安装字符集 - 修改字符集
- 临时修改可使用
export LC_CTYPE=C.UTF-8
- 永久修改可修改文件
/etc/sysconfig/i18n
添加LC_CTYPE=C.UTF-8