最近在服务器上写了个python脚本来跑一些任务,本地(macos 10.14)通过ssh来远程运行这个脚本:
1 | ssh knktc@cloud.knktc.com /home/knktc/test.py |
结果却出现了类似下面的错误:
1 | UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1941: ordinal not in range(128) |
因为现在已经全部改用python3,又出现这样的错误感觉有点奇怪。
用locale命令检查了下本地的LC_CTYPE,是”zh_CN.UTF-8”,再用”locale -a”命令检查下远程服务器的输出,发现并不支持”zh_CN.UTF-8”,估计是这个原因导致了远程脚本执行的时候没用UTF8而是用ASCII作为了LC_CTYPE的值。
于是,要解决这个问题,可以修改下本地的ssh客户端配置,编辑本地的**/etc/ssh/ssh_config**配置文件(可能需要sudo),注释掉如下配置:
1 | SendEnv LANG LC_* |
或是编辑服务器上的**/etc/ssh/sshd_config**配置文件,注释掉如下的配置(修改完成后需要重启sshd服务):
1 | AcceptEnv LANG LC_* |
重试一次,完全正常了。