locale出问题了cannot set LC_CTYPE to default locale

linux debian mac by Xudong Zhang @ 2016-01-09 13:28:40

之前一直用的好好的虚拟机,今天登录后打开代码文件,发现里面的中文全是乱码的,猜到是locale问题,执行locale命令一开始就有异常信息:

# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
...
LC_ALL=

除了一开始的warn其它看着也还好吧,貌似也没什么问题,dpkg-reconfigure locales试过了也没用。


我在登录我的云主机也碰到了类似问题,云主机之前登录都没有问题,然后这次是mac登录出现这问题了,试着dpkg-reconfigure locales处理了几次都没好,然后有点怀疑mac的terminal做了什么手脚。

搜了下,果然,mac的terminal以及我装的iterm2都有类似于”set locale variables automatically”这样的设置(iterm2的在preference->profile->terminal里),这个就是ssh进别的主机后自动帮你把主机的locale改了,就是这变态的设置。

然后就是果断取消这个设置,然后重新ssh进去就好了,对于从linux转到mac的人似乎得注意这个了。

另外主机的sshd服务的配置里貌似也有关于这个的设置,可以设置成不接受client端改变locale的行为,不过我没有尝试这个,应该也是可以的。

by Xudong Zhang @2016-01-17 16:31:50.641 +0800 CST


我来回答

Markdown格式技巧

  • 行尾添加2个空格或者添加一个空行就能换行
  • 斜体: *hello* 或者 _world_
  • 加粗: **hello** 或者 __world__
  • 代码块: 添加空行,然后代码缩进4个空格
  • 特殊字符: 用\避免转义;\*就是*本身
  • python: `__name__`可以以代码形式输出__name__
  • 一个简单的例子

切换到移动版