SSH连接Linux后出现ascii异常问题

背景

Mac 通过 SSH 连接 Linux 服务器,尝试开启服务器上 Python3.6 的 web 服务的时候,服务发生无法解码的异常。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 443: ordinal not in range(128)

令人费解的是,别人跟我运行相同命令是 ok 的。

解决过程

首先搜一波资料,看了这篇 帖子,了解了大概是关于 locale 的问题。

按照帖子中的方法设置了 export PYTHONIOENCODING=utf-8,然而还是没有效果,sys.stdout.encoding 依然输出 ANSI_X3.4-1968。而且服务器并不缺语言包。

接着搜索,看了这篇 StackOverflow 的帖子,通过 localelocale -a 命令检查了服务器的配置都没有问题,很是纳闷。

执行 locale 命令的时候出现一行 Cannot set LC_CTYPE to default locale: No such file or directory ,再次搜索这行报错,发现了这篇 帖子,帖子中第二高赞的回答中,提到了 Mac 通过 SSH 连接 Linux 服务器的时候,iTerm/Terminal 会自动设置环境变量,在终端的设置中取消自动设置即可。尝试了一下,果然有效。

注意点

上面的解决方法可能导致 Mac 本地终端字符解码出现问题,可以检查 Mac 的 locale 环境变量有没有设置为 utf-8,这里就不赘述了。

参考资料
https://blog.csdn.net/j___t/article/details/97705231
https://stackoverflow.com/questions/35502328/unicodeencodeerror-on-linux-but-not-on-windows
https://askubuntu.com/questions/599808/cannot-set-lc-ctype-to-default-locale-no-such-file-or-directory/778672#778672

你可能感兴趣的:(SSH连接Linux后出现ascii异常问题)