Pages

Monday, 26 March 2018

ubuntu服务器中设置locale为中文仍然无效的解决方法

最开始是因为在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中似乎已经解决了这个问题。

No comments:

Post a Comment