SVN无法设置LC_CTYPE语言环境

65

每当我在我的服务器上使用SVN时,我开始遇到以下错误:

svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LC_CTYPE is UTF-8
svn: warning: please check that your locale name is correct

我猜测我的svn客户端(使用Versions应用程序)和服务器svn可能出了一些问题...

我怎样才能使这个警告永久地从服务器上消失,每当我使用这些命令时?

13个回答

68

检查输出结果

locale -a

如果 SVN 抱怨的区域设置没有安装,则可以安装它。

对于 Debian 或类似系统,您可能需要执行以下操作:

sudo dpkg-reconfigure locales

如果你想手动配置区域设置:

sudo vim /etc/locale.gen # and add "en_US.UTF-8 UTF-8"
sudo locale-gen

或者,如果你的 locale-gen 支持参数(不适用于 Debian):

sudo locale-gen en_GB.UTF-8
sudo locale-gen en_US.UTF-8

正如Ankit在他的答案中提到的那样:

export LC_ALL=C

可能会起作用(在您当前的会话或 .profile 文件中)。


对于使用 Solaris 的用户(抱歉),您需要配置 locale adm,然后添加正确的 locale(例如,localeadm -l -v;localeadm -a en_US.UTF-8 -d /cdrom/sol_10_811_x86)。请参考 http://www.netlinxinc.com/index.php?option=com_content&view=article&id=50:..。 - Petra Kahn
5
在Debian(也可能是Ubuntu)系统中,locale-gen命令不接受参数,而是生成在/etc/locale.gen中激活的内容。此外,在基于Debian的Univention Corporate Server上,该文件由配置注册表生成,因此必须按以下方式设置所需/缺失区域设置的值:ucr set locale='de_DE.UTF-8:UTF-8 en_US.UTF-8:UTF-8' - Henning
对我来说,在 /usr/share/applications/jetbrains-idea.desktop 中添加 "env LC_ALL=C" 就解决了这个问题。 - Smile4ever
2
我从subversion得到了同样的警告,设置export LC_ALL=en_GB.UTF-8有效(在运行sudo locale-gen en_GB.UTF-8之后)。我认为这比将其设置为C语言环境更好。 - Sorin Postelnicu
1
我刚试着修复这个问题。在我的Debian系统中,使用sudo dpkg-reconfigure locales替换sudo apt-get install language-pack-en-base更好。 - piglovesx
显示剩余2条评论

49

虽然将LC_CTYPE设置为空值对我有用,但根本原因是我的Mac上的Terminal应用程序在启动时设置了区域设置,即使我通过SSH连接到另一个系统。

可以在终端 > 首选项中解决此问题:

  • 选择“个人资料”选项卡,从子选项卡中选择“高级”
  • 取消选中“在启动时设置区域环境变量”

是的,使用Mavericks,这对我解决了问题。 - Maarten Hartman
1
在Mac OSX上,还有几种其他的解决方法:http://www.cyberciti.biz/faq/os-x-terminal-bash-warning-setlocale-lc_ctype-cannot-change-locale/ - Ales Teska
我遇到了这个问题,但是如果我取消勾选它,终端就无法显示中文文件名。 - acerphenix
我最近也注意到了一个非ASCII字符的问题。在我的情况下,瑞典字符åäö停止工作了,可能与更新到Yosemite有关。 - Andreas K

28

如果您想修复这个问题,可以手动设置“LC_ALL”变量。

要永久保存更改,请编辑文件“/etc/environment”,并添加以下行:

LC_ALL=C

保存文件并退出编辑器。为了使其应用,您必须注销当前的Shell会话。下次登录时,SVN的问题将消失。


15

LC_ALL 和 LANG 设置对我不起作用,但 LC_CTYPE 起了作用。

LC_CTYPE=en_US.UTF-8

在我看来(至少在macOS上),这似乎是正确的解决方案。其他解决方案导致终端无法正确显示UTF-8文件名,但在正确设置LC_CTYPE之后,文件名将被正确显示,并且svn警告也会消失。 - Joe Strout

9
在 Debian Jessie 上:
我运行了:
sudo dpkg-reconfigure locales

添加并安装了缺失的区域设置,然后它就可以正常工作了。


我必须先执行 sudo apt-get install locales 命令(Debian Jessie / Getchip)。 - paul_h

3
在/etc/ssh/ssh_config中注释掉带有SendEnv LANG LC_*的行对我很有帮助(openSUSE)。

它也可以通过在 /etc/ssh/sshd_config 中删除 AcceptEnv LANG LC_* 来配置远程服务器。我建议两者都做。我认为这比更改终端配置或在服务器上安装不必要的语言环境包是更好的解决方案。 - Christian Schmidt

2

这是因为您的系统没有生成正确的区域设置。

请在 /etc/locale.gen 文件中取消注释您想要支持的语言行。

例如:

en_GB.UTF-8 UTF-8
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

然后运行sudo locale-gen


理想情况下,我希望告诉Subversion使用en_AU.UTF-8,但这是次优选择(在我看来)。 - Peter L

1

对于iTerm2:

配置文件 → 打开配置文件… → 编辑配置文件… → 终端 → 取消勾选自动设置区域变量


1
我们公司也遇到了这个问题,在使用IntelliJ时。我的一个同事刚刚解决了它。
对于我们来说,问题出在/etc/ssh/ssh_config文件中的SendEnv LANG LC_*这一行。当我注释掉这一行时,一切都正常工作了。

0

我发现将几个答案结合起来可以得到正确的行为。

  1. 我们必须安装正确的区域设置支持(sunos 的 localadm,linux 的 locale-gen)
  2. 我们必须将 LC_ALL 设置为适当的区域设置

这取决于您源代码树中有哪些文件名。例如,我有英语、希伯来语和阿拉伯语。en_US.UTF-8 对我有效,而单独使用 "C" 会导致我无法更新文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接