Ubuntu 20.04.4 LTS 服务器系统产生有关区域设置的奇怪错误消息。
服务器 20.04:
$ LC_ALL=en_US.ISO8859-1
en_US.ISO8859-1: unknown locale
$ echo $LC_ALL
en_US.UTF-8
我有一个脚本将 LC_ALL 值设置为此语言环境。这应该很容易修复,只需注释掉 LC_ALL= 行或将其设置为我的服务器正在使用的语言环境之一即可。
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
但这让我很烦...为什么会出现“未知语言环境”消息?我配置了其他 Ubuntu 服务器(大部分是 18.04),不会出现此错误。示例:
服务器 18.04:
$ LC_ALL=en_US.ISO8859-1
/usr/share/i18n
$ echo $LC_ALL
en_US.ISO8859-1
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
我尝试了一些建议的命令,但都无法解决问题或找出可能的原因。我尝试过:
- 冉
locale-gen
- 冉
dpkg-reconfigure locales
- 已验证的内容
/etc/default/locale
- 已验证的内容
/etc/environment
- 删除并重建
/usr/lib/locale/locale-archive
一些文章还提到审查或编辑条目,/var/lib/locales/supported.d
但该目录在我的任何 Ubuntu 服务器上都不存在。
所以我的解决方案是注释掉问题脚本中的 LC_ALL 行。但这并不能回答问题。为什么我在其他几台服务器上都没有收到错误,而只在新服务器上收到错误?这可能是 20.04 中的一些新行为吗?我至少还有一台 20.04 服务器没有收到此错误,但我认为它是从 18.04 升级而来的,而不是全新安装的 20.04。
有任何想法吗?
TIA。史蒂夫
编辑 (1):有一种想法(但并未解释为什么它在其他 Ubuntu 服务器上有效)是,问题脚本中的语言环境名称可能设计用于不同的操作系统。我注意到它使用的是 LC_ALL="en_US.ISO8859-1",但 Ubuntu 中的相同语言环境称为“en_US ISO8859-1”(ISO 部分前有一个空格,而不是句点)。
编辑 (2):我尝试了 Gunnar 的建议,但问题没有解决。在尝试此操作之前,我已使用 sudo 将其设置为 root。
$ locale-gen en_US
Generating locales (this might take a while)...
en_US.ISO-8859-1... done
Generation complete.
$ locale -a
C
en_US
en_US.iso88591
en_US.utf8
POSIX
$ LC_ALL="en_US.ISO8859-1"
en_US.ISO8859-1: unknown locale
需要注意的是,当我使用“locale -a”时,我的其他 Ubuntu 服务器没有将“en_US.iso88591”列为已安装/生成的语言环境之一,但我没有收到未知语言环境错误。
我可以看到生成的 latin1 语言环境显示为“en_US.iso88591”,而不是我所拥有的“en_US.ISO8859-1”,所以我可以尝试更改它以匹配,但这不是重点。我拥有的脚本已在其他 Ubuntu 18.04 服务器上运行了至少 24 个月,没有出现我在新安装的 20.04 服务器上看到的错误。
编辑(3):@Gunnar:三个地方都没有运气
$ LC_ALL="en_US.ISO8859-1"
en_US.ISO8859-1: unknown locale
$ LC_ALL="en_US.iso88591"
en_US.iso88591: unknown locale
$ LC_ALL="en_US"
en_US: unknown locale
更新:重新启动似乎无法解决“未知语言环境”消息。我们发现,在安装了 Ubuntu 20.04.4 的三台服务器上,所有服务器都显示此消息。另一方面,没有任何一台 Ubuntu 18.04.6 服务器产生此错误。尽管我们从未(据我们所知)在任何服务器上激活过“en_US.ISO8859-1”语言环境。
作为解决方案,我们只需从设置为“LC_ALL=en_US.ISO8859-1”的 shell 脚本中删除该行,从而避免消息显示在屏幕上。
这仍然不能解释为什么 18.04 服务器似乎都接受名称“en_US.ISO8859-1”作为有效的 LC_ALL 值,而在 20.04 服务器上却报告“未知区域设置”。但我怀疑我对一个可能永远不会使用的设置过于痴迷。
答案1
如果您确实出于某种原因想要使用 latin1 区域设置而不是 UTF-8 区域设置,则需要先生成它。
sudo locale-gen en_US