无法将LC_CTYPE设置为默认语言环境:无此类文件或目录


54

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

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

$ 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

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

怎么修?


您是否阅读过askubuntu.com/a/229512/387382
Helio

Answers:


53

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

export LC_ALL="en_US.UTF-8"

这行得通,但是为什么呢?
于家澳

16
自变量在会议结束时销毁这不能解决任何问题..
艾蒂安·戈蒂埃


用很少的话说就是很好的解决方案。大声笑!
Redbob

1
导出此var时,我得到:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
nnyby,

35

当您从Mac通过ssh登录到Linux机器时,也会发生相同的问题(LC_CTYPE = UTF-8,这是错误的),并且终端会自动设置环境变量。有一个复选框。取消选中它,您就很好了。在iTerm中,它位于配置文件->“终端”选项卡中。


2
在iTerm中,禁用复选框“首选项>配置文件>默认>终端>环境>自动设置区域设置”
ecerulm

1
-1:虽然这可能有效,但它具有极高的侵入性。您还可能会影响本地终端的行为以及所连接的每个主机的行为。尽管您的发现是正确的,但最好使用ssh_config使其不向已知有问题的主机发送LC_ *。
马克斯·里德

3
您能否添加自己的答案,并扩展其解释范围,以进一步解释这可能会影响本地终端的行为以及如何告诉ssh_config不发送LC_ *的原因。因为您只是-1我的答案而没有真正的解释。
raarts

如果要使用终端从MacOS连接,请转到终端设置>高级,然后取消选中“在启动时设置区域设置环境变量”。
javaxian

似乎发生的事情是:在本地系统上,您已经安装了某些语言环境,然后SSH到另一个未安装此语言环境的系统。终端客户端将告诉远程系统您的语言环境是什么,并且远程系统将无法以请求的语言回答。您可以通过两种方法来解决此问题:更改,请求的内容或将请求的语言环境添加到远程系统(需要root访问权限)。
1

27

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

LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"

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


3
好吧,这样做最终会导致混乱的语言环境配置。/etc/environment不适用于在Ubuntu中设置语言环境;/etc/default/locale是。另外,在台式机的情况下,永远不要设置LC_ALL永久设置。您的方式将使用于控制桌面上的语言/区域设置(例如语言支持)的UI无效。
Gunnar Hjalmarsson

这实际上有效。重新启动后。
TranslucentCloud

注销和登录,它应该可以工作
Sand1512


9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

我正在运行一个几乎干净的Vultr实例,但出现了问题,调查了环境vars,然后一切正常。但是,sudo dpkg-reconfigure locales做了一些必须丢失的事情。我的ssh会话现在可以了。谢谢!
乔纳斯(Jonas)'18年

6

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

LC_CTYPE="UTF-8"

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

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

如果不是从那里来的,则可能来自您的shell配置,或者来自客户端计算机的配置,或者如果您通过SSH远程登录。


我可以将LC_CTYPE更改为utf8吗?
MAVE

@卢卡斯:不,那将同样糟糕。由于已设置LANG,因此您只需删除以LC_CTYPE开头的整行。
Gunnar Hjalmarsson

如果要设置LC_TYPE,还应该将其设置为“ en_US.UTF-8”。

如果它来自客户端计算机的配置,则可以使用来在服务器上添加语言环境dpkg-reconfigure locales
Paul Rougieux

5

这个命令救了我的命

sudo echo "LC_ALL=en_US.UTF-8" >> /etc/environment
sudo echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
sudo echo "LANG=en_US.UTF-8" > /etc/locale.conf
sudo locale-gen en_US.UTF-8

5
文件在打开之前sudo。除非您已经是root用户,否则重定向将不起作用。
马丁·桑顿

3

/ etc / default / locale文件可以包含其他(但不必要)行:示例文件如下所示:

#  File generated by update-locale
LANG=en_US.UTF-8
LANGUAGE="en_IN:en

要整理并成功生成和重新配置区域设置,请从此文件中删除所有行或将其注释掉,但以下各项除外:

LANG=en_US.UTF-8

该文件最终应如下所示:

#  File generated by update-locale
LANG=en_US.UTF-8
# LANGUAGE="en_IN:en

此后,运行dpkg-reconfigure locales,在提示您选择语言环境时,选择en_US.UTF-8,您应该一切顺利。Generation complete.该过程完成后,您会收到一条消息。


0

在将主目录点文件迁移到新计算机时,我设法自己导致了这种情况,LC_但是由于搜索文件而没有找到原因,因此我未能找出原因LOC

~/.bashrc我复制的文件具有以下内容:

export LOCPATH=/var/guix/profiles/per-user/root/guix-profile/lib/locale

(此处的特殊值是由于先前在旧计算机上使用GNU Guix进行的实验所致;但相关的事实仅仅是环境变量设置为现在无效的路径。)

运行各种程序时,这导致以下错误:

Warning: locale not supported by C library, locale unchanged

而这些错误在运行时locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

删除(或注释掉)该LOCPATH行解决了我的问题。


0

只需运行以下命令:

sudo apt-get upgrade

它将生成所有定位,然后将默认值设置为US:

export LC_ALL="en_US.UTF-8"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.