linux系统管理-locale语言环境

linux下语言环境的问题,一般不太会碰到,要是真遇到字体问题也是挺烦人的,不解决看到系统乱码和错误提示挺膈应人,解决后就清爽多了。linux的语言环境是通过locale命令展开的,原理、操作命令、问题样例如下

概念理解

变量说明

  • 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持
  • 在locale环境中,有一组变量,代表国际化环境中的不同设置
    • LC_COLLATE,定义该环境的排序和比较规则
    • LC_CTYPE,用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。 LC_MONETARY,货币格式
    • LC_NUMERIC,非货币的数字显示格式
    • LC_TIME,时间和日期格式
    • LC_MESSAGES,提示信息的语言。
    • LANGUAGE参数,它与LC_MESSAGES相似,但如果该参数一旦设置,则LC_MESSAGES参数就会失效。 - - LANGUAGE参数可同时设置多种语言信息,如LANGUAGE=“zh_CN.GB18030:zh_CN.GB2312:zh_CN”
    • LANG,LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于 LC_ALL
    • *LC_ALL,它是一个宏,如果该值设置了,则该值会覆盖所有LC_的设置值。注意,LANG的值不受该宏影响
  • locale的命名规则样例 zh_CN.GBK,zh代表中文, CN代表大陆地区,GBK表示字符集

命令

  1. 查看当前系统语言环境
[root@w117 ~]#locale
LANG=en_US.UTF-8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=zh_CN.utf8
  1. 查看系统内安装的locale
[root@w117 ~]# locale -a  |grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
  1. 安装locale(网上还有另一个种方法,编辑/etc/locale.gen,然后执行locale-gen)
sudo locale-gen en_US.UTF-8
  1. 文件/etc/default/locale 保存了locale的默认设置,若没有生效,参考下面问题1

常见问题解决

问题:ssh登录报错“manpath: can’t set the locale; make sure $LC_* and $LANG are correct”

  1. 检查/etc/default/locale文件,内容如下:
LC_ALL="en_US.UTF-8"
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
  1. 执行locale -a,发现zh_CN.utf8和en_US.utf8也是可用的

  2. 应该是/etc/default/locale没有生效,找到Why is /etc/default/locale not sourced at login via ssh?,发现“Both /etc/default/locale and /etc/environment are supposed to be parsed by PAM. They are not script files, and hence should not be sourced”

  3. 通过修改/etc/ssh/sshd_config的参数UsePAM yes,然后sudo systemctl restart sshd,再重新登录~~~ok

问题:终端时的中文乱码问题

现在是在mac默认环境下的测试

locale -a  |grep zh_CN
#zh_CN
#zh_CN.gb18030
#zh_CN.gb2312
#zh_CN.gbk
#zh_CN.utf8
export LC_ALL=en_US.utf8
date
#-bash: local: 
export LC_ALL=zh_CN.utf8
date
#-bash: local: 只能在函数中使用
export LC_ALL=zh_CN.gbk
date
#-bash: local: ֻ���ں�����ʹ��

说明:通过locale -a看到的字符集,并非设置好了就正常,还跟终端支持的编码有关

网上有人测试说,设为zh_CN.gb18030、zh_CN.gbk、zh_CN.gb2312都能正常显示简体中文,但是设为zh_CN.utf-8是乱码,而在我的mac主机,设为zh_CN.gb18030、zh_CN.gbk、zh_CN.gb2312都乱码,zh_CN.utf-8正常。

原因:这种情况一般是终端和服务器的字符集不匹配,MacOSX下默认的是utf8字符集。

问题:用xshell查看中文正常,但是vim是乱码,原因可能是xshell工具的编码问题

例如xshell选择编码:xshell怎么设置编码,xshell中文乱码解决方法

打开xshell,点击上方的编码图标
xshell修改编码方式

问题:Mac环境下vim遇到的语言问题

执行 vim x 出现下列错误:

Warning: Failed to set locale category LC_NUMERIC to en_CN.
Warning: Failed to set locale category LC_TIME to en_CN.
Warning: Failed to set locale category LC_COLLATE to en_CN.
Warning: Failed to set locale category LC_MONETARY to en_CN.
Warning: Failed to set locale category LC_MESSAGES to en_CN.

解决方法:

vim ~/.bash_profile 
#OR (vim  ~/.bashrc) 
export LC_ALL=en_US.UTF-8 #或者 zh_CN.UTF-8,可以通过locale -a查看系统内安装的locale

有的主机叫做“en_US.UTF-8” 有的用“en_US.utf8”
参加 https://stackoverflow.com/questions/56716993/error-message-when-starting-vim-failed-to-set-locale-category-lc-numeric-to-en

参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值