将 Mac 从 Sierra 升级到 High Sierra 后,当我使用终端 SSH 连接到 Centos(6 和 7)时,收到 setlocale 警告。
认为有一些解决方法可以解决这些问题,我发现问题是 locale 环境变量.bash_profile
都是小写的en_us.utf-8
。更改它以en_US.UTF-8
解决问题。
我尝试过的其他解决方案,在互联网上找到的是:
在 CentOS(服务器)中
LC_LANG=en_US.utf8
修复/etc/environments
问题。在 Mac(客户端)中
如果我运行locale -a
,区域设置是
en_US.utf8
在 CentOS 和
en_US_UTF-8
在 MacOS 上
CentOS 和 MacOS 中语言环境变量的规范化过程似乎有所不同。在 CentOS 上,它似乎标准化UTF-8
为小写并会删除连字符,但en_US
在这种情况下需要。在 MacOS 上,它似乎标准化为大写并且需要连字符并接受 的任何大小写混合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),或者
Sierra 在终端中标准化 LC_ALL 环境变量。
对于语言部分,有一种标准化:BCP47(https://www.rfc-editor.org/rfc/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 中并未引用该标准,并且该标准注册只有少数北欧国家。
所以,据我所知,没有标准化。语言标记标识符是标准化的((点)之前的部分.
,但没有说明区域设置标识符的语言部分应该遵循它。
归档时间: |
|
查看次数: |
7368 次 |
最近记录: |