我的Django应用程序在启动时加载一些文件(或当我执行管理命令时)。当我从我的Arch或Ubuntu计算机之一通过ssh连接时,所有工作都正常,我可以成功运行任何命令和迁移。
但是当我从OS X(我有El Capital)通过ssh连接并尝试做同样的事情时,我会收到以下错误消息:
UnicodeDecodeError: 'ASCII' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
为了打开我的文件,我使用
with open(path_to_file) as f: ...
当从iterm和terminal进行ssh时,出现了错误。我发现原因是LC_CTYPE
环境变量。在我的其他Linux机器上没有设置,但在Mac上它是UTF-8
,所以当我ssh到服务器时它被设置成相同的值。取消设置LC_CTYPE
后,错误被修复。实际问题是发生了什么以及如何避免这种情况?我可以在本地机器上取消设置此变量,但会产生负面影响吗?最佳做法是什么?
UTF-8
不是有效的LC_CTYPE
,所以我在我的.bash_profile
文件中加入了export LC_ALL=en_US.UTF-8
和export LANG=en_US.UTF-8
,问题就解决了。顺便说一下,我使用的是Ubuntu 16.04作为服务器。我不知道open使用LC_CTYPE
来定义文件编码,这确实很奇怪。谢谢你的帮助。我会接受你的回答。 - valignatev