-bash:warning:setlocale:LC_ALL:无法更改区域设置(en_us.utf-8)

时间:2018-04-11 14:48:35

标签: bash macos utf-8

将我的Mac从Sierra升级到High Sierra后,当我使用终端SSH连接到Centos(6和7)时,我收到了setlocale警告。  以为有几种方法可以解决这些问题,我发现问题是.bash_profile中的语言环境变量是在所有小写的情况下," en_us.utf-8"。将其更改为" en_US.UTF-8"解决问题。

我试过的其他解决方案,在互联网上找到了

在CentOS(服务器)

  • 在/ etc / enviorments中设置LC_LANG = en_US.utf8可以解决问题。

在Mac(客户端)

  • 在ssh_config中删除SendEnv LC修复问题

如果我运行locale -a,CentOS上的语言环境是en_US.utf8,而Mac上的语言环境是en_US_UTF-8。

似乎CentOS和MacOS中的语言环境变量的规范化过程是不同的。在CentOS中,它似乎将UTF-8规范化为小写并删除连字符但在确切情况下需要en_US。在Mac中,似乎它正常化为大写并需要连字符并接受en_US中的任何大小写混合。所以兼容的设置是en_US.UTF-8,其中三个字母UTF可以是任何情况。

(这就是为什么我无法通过在Mac中将语言环境变量设置为en_US.utf8来解决问题,它会将LC_ALL更改为空白。)

那么标准规范化程序是什么?或者如果有标准。

我不明白的另一件事是,为什么它只会在我升级到High Sierra之后发生。因为我发现我的.bash_profile设置正在使用" en_us.utf-8"那么为什么我之前没有收到警告信息呢?两种可能的猜测是

  • High Sirrea在升级后更改ssh_config(通过添加SendEnv),或

  • Sirrea将规范化终端中的LC_ALL环境变量。

2 个答案:

答案 0 :(得分:0)

对于语言部分,有一种标准化:BCP47(https://tools.ietf.org/html/rfc5646)。这就是说语言标识符与案例无关,但最好遵循RFC中描述的标准情况(语言的小写,国家的大写,脚本的初始大写)。 Java指的是区域设置的标准:http://www.oracle.com/technetwork/java/javase/java8locales-2095355.html#util-text(但只是语言标识符,没有编码)。 JavaScript类似(但它扩展了带有-u-xxxx后缀的语言环境)。 (C和Python只是与系统区域设置接口)。

POSIX(http://pubs.opengroup.org/onlinepubs/9699919799/functions/setlocale.html)说The contents of this string are implementation-defined。 LSB仅涉及POSIX和ISO上关于非冲突名称的讨论(没有链接):https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/localization.html

维基百科列出了POSIX的另一个ISO标准,但目前的POSIX没有引用它,标准注册表只有少数北欧国家。

所以,据我所知,没有标准化。语言标记标识符是标准化的(.(点)之前的部分,但没有任何说明语言环境标识符的语言部分应遵循该标识符。

答案 1 :(得分:-4)

找到-a

lan1 局域网2 …

导出LC_ALL =“ lan 1”