将我的Mac从Sierra升级到High Sierra后,当我使用终端SSH连接到Centos(6和7)时,我收到了setlocale警告。 以为有几种方法可以解决这些问题,我发现问题是.bash_profile中的语言环境变量是在所有小写的情况下," en_us.utf-8"。将其更改为" en_US.UTF-8"解决问题。
我试过的其他解决方案,在互联网上找到了
在CentOS(服务器)
在Mac(客户端)
如果我运行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环境变量。
答案 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”