无法将 LC_CTYPE 设置为默认语言环境:没有这样的文件或目录

97 locale 12.04

我有这个确切的问题,但没有解决方案。我试过了,但没有用

如何解决我的语言环境问题?

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
C
C.UTF-8
en_US.utf8
POSIX
Run Code Online (Sandbox Code Playgroud)

这是因为 en_US.UTF-8 和 en_US.utf8 不匹配吗?

怎么修?

小智 75

打开终端并执行以下命令:

export LC_ALL="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

  • 这不能解决任何问题,因为变量在会话结束时被销毁.. (45认同)
  • 导出此变量时,我得到:`-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)` (7认同)
  • 这可行,但为什么呢? (2认同)
  • 对于那些想要在会话之间保留设置的人,请将该行添加到您的 ``.bashrc``` 文件中。 (2认同)

raa*_*rts 75

当您通过 ssh 从 Mac 登录到 linux 机器并且您的终端自动设置环境变量时,可能会发生同样的问题(LC_CTYPE=UTF-8,这是错误的)。有一个复选框。取消选中它,你就可以开始了。

在 iTerm 中,它位于配置文件 -> 终端选项卡中。

在终端中,它位于终端 -> 首选项 -> 配置文件 -> 高级选项卡中。

  • 在 iTerm 中禁用复选框“首选项>配置文件>默认>终端>环境>自动设置语言环境变量” (9认同)
  • 您能否添加您自己的答案,并详细解释为什么这可能会影响您本地终端的行为,以及如何告诉 ssh_config 不发送 LC_*。因为你只是 -1 我的答案而没有真正的解释。 (5认同)
  • 似乎发生的是:在您的本地系统上,您安装了一些语言环境,然后通过 ssh 连接到另一个没有安装该语言环境的系统。终端客户端将告诉远程系统您的语言环境是什么,远程系统将无法以请求的语言回答。您有两种方法可以解决此问题:要么更改请求的内容,要么将请求的区域设置添加到远程系统(这需要 root 访问权限)。 (3认同)
  • -1:虽然这可能有效,但它极具侵入性。您还可能会影响本地终端的行为以及您连接到的每个主机的行为。虽然您的发现是正确的,但最好使用 ssh_config 使其不向已知有问题的主机发送 LC_*。 (2认同)
  • 如果您使用终端从 MacOS 连接,请转到终端设置>高级并取消选中“启动时设置区域设置环境变量”。 (2认同)

San*_*avi 41

我遇到了类似的问题,并在我的/etc/default/locale文件中添加了以下几行:

LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

我从这篇文章中得到了这个:如何解决我的语言环境问题?

  • 好吧,通过这样做,您最终会得到一个非常混乱的语言环境配置。`/etc/environment` 不是为了在 Ubuntu 中设置语言环境;`/etc/default/locale` 是。此外,在桌面的情况下,您永远不应该永久设置“LC_ALL”。您的方式将使用于控制桌面上的语言/区域设置的 UI(例如语言支持)变得无用。 (3认同)
  • 注销并登录,它应该可以工作 (2认同)

Jon*_*uez 38

生成缺少的语言环境并使用以下命令选择所需的默认值:

sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)

  • 实际上只有 `sudo dpkg-reconfigure locales` 是必要的,因为它使用 locale-gen。 (3认同)
  • 这应该是问题的实际答案,而且只有一个 (2认同)

小智 13

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)


小智 10

这个命令救了我的命

echo "LC_ALL=en_US.UTF-8" | sudo tee -a /etc/environment
echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
echo "LANG=en_US.UTF-8" | sudo tee -a /etc/locale.conf
sudo locale-gen en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

  • 文件在 `sudo` 之前打开。除非您已经是 root,否则重定向将不起作用。 (5认同)

Gun*_*son 6

locale命令的输出表明您的环境中有此不正确的行:

LC_CTYPE="UTF-8"
Run Code Online (Sandbox Code Playgroud)

(“UTF-8”不是有效的语言环境名称。)

它通常来自/etc/default/locale. 请删除该行(如果存在),然后重新登录。

如果它不是来自那里,它可能来自你的 shell 配置,或者如果你通过 SSH 远程登录,来自客户端机器的配置。