最开始是因为在DO的VPS上跑ubuntu 14.04时,运行自己写的python3脚本发现在print中文时会报如ascii之类的错误;想想python3不是早就解决了中文编码问题,全部采用unicode了么,折腾一大圈后才发现是ubuntu本身的问题。

这个症状不仅仅出现在python中,甚至是ubuntu中文件用nano打开,里面的中文也会显示乱码。

最初怀疑是用的PUTTY不支持中文,搜了一圈下来发现PUTTY早就已经是默认采用UTF-8编码了,所以完全不关PUTTY的事情。

然后开始怀疑是不是ubuntu为英文环境没有中文语言支持,按照一般方法

locale

后发现LANGLANGUAGE为缺省,

然后

locale -a

列表中似乎并没有如zh_CN之类的语言包,

安装中文语言包

apt-get install language-pack-zh-hans

然后添加中文支持

locale-gen zh_CN.UTF-8

成功后继续

locale -a

出现zh_CN.utf8

接下来编辑文件

nano /etc/default/locale

设置

LANG="zh_CN.uft8"
LANGUAGE="zh_CN.utf8"

然后重启服务器

reboot

用python测试

print('是')

发现PUTTY中根本打不了“是”,重新

locale

发现LANGLANGUAGE还是缺省!修改了根本不管用!
我也不太清楚为何修改不会生效,反正是折腾了半天修改了能修改的文件还是没用

直到找到了利用LC_ALL修改全部语言设置的命令

export LC_ALL='zh_CN.utf8'

马上

locale

全部的语言设置都变成zh_CN了,python也能正常工作,系统提示也是中文了!


注意有些地方写到

export LC_ALL='zh_CN.UTF-8'

这里直接生搬硬套的话不会有任何效果的,正确的方法是:

  1. locale查询是否有如zh_CN的语言支持
  2. 没有的话执行locale-gen zh_CN.UTF-8
  3. 加入中文支持后再次locale
  4. 使用locale中显示的zh_CN使用export命令,如export LC_ALL='zh_CN.utf8'或`export
    LC_ALL='zh_CN.UTF-8'`

这种改变只针对本次启动有效,系统重启后还是会恢复默认,所以每次开机后都需要执行

export LC_ALL='xxx'

或直接将其加入启动。


Ubuntu 15.04中似乎已经解决了这个问题
putty.jpg