gpt4 book ai didi

bash - -bash : warning: setlocale: LC_ALL: cannot change locale (en_us. utf-8)

转载 作者:行者123 更新时间:2023-12-03 02:28:58 25 4
gpt4 key购买 nike

将 Mac 从 Sierra 升级到 High Sierra 后,当我使用终端 SSH 连接到 Centos(6 和 7)时,我收到了 setlocale 警告。

认为有一些解决方法可以解决这些问题,我发现问题是 .bash_profile 中的区域设置环境变量全部为小写 en_us.utf-8 。将其更改为 en_US.UTF-8 解决了问题。

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

在 CentOS(服务器)中

  • /etc/environments 中设置 LC_LANG=en_US.utf8 解决问题。

在 Mac(客户端)中

  • 删除 ssh_config 中的 SendEnv LC 即可解决问题

如果我运行locale -a,则区域设置为

CentOS 上的

en_US.utf8

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 ) 表示该字符串的内容是实现定义的。 LSB 仅指 POSIX 和 ISO 上关于非冲突名称的讨论(无链接):https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/localization.html

维基百科列出了 POSIX 的另一个 ISO 标准,但当前的 POSIX 中未引用该标准,并且该标准注册仅少数北欧国家。

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

关于bash - -bash : warning: setlocale: LC_ALL: cannot change locale (en_us. utf-8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com