svn "cannot set LC_CTYPE locale" 问题以及LANG, LC_CTYPE, LC_ALL值的设置

今天在linux环境下svn检出时报这个错误,错误信息如下:

$ svn
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is en_US.UTF-8
svn: warning: please check that your locale name is correct
Type 'svn help' for usage.
从网上找了两篇文章,一篇讲解原因,一篇展示解决方式,所以把两个文章copy到一起具体见下面:

1、原因分析文章:

当下,应用程序的国际化(或本地化)的要求逐步显现。支持unicode,也就逐步成为应用程序(特别是那些应用广泛的程序)的必然趋势,例如,GNU就将(更好的)支持unicode作为emacs23的一个亮点。这些变化,对我们中国的程序员以及软件用户来说,都是上好的消息。

问题的另一方面是,不是所有的现有程序都(很好)的支持unicode。很多应用程序,还是主要面向ASCII编码的。能够支持unicode编码的程序,为了提供向后兼容性,其中一些提供了一个启动参数、或配置参数,来启动对unicode的支持。如果没有应用这个特定的参数,程序将不支持unicode。

一些应用程序,特别是那些有较久历史的程序,默认配置通常是面向ASCII编码的,如GCC。这样的话,一些unicode编码的文本,就显示为乱码。如果你在LANG=en_US.utf8的Linux系统上使用过gcc4.2.4(3)及以上版本的话,你就肯定会有这方面的经历。GCC产生的编译错误和警告消息里,包含一堆乱码,有时候几乎可以让你无法阅读理解。

如果你想要一个支持unicode的工作环境,在Linux系统中,有标题所示的3个全局环境变量:LANG, LC_CTYPE, LC_ALL。通过设置这些环境变量,可以在系统范围中启动应用程序对unicode的支持(至少向所有应用程序表达了这个愿望)。但是,这里有一个糟糕的问题:如果系统中一些应用程序对unicode的支持并不全面(甚至不支持unicode,而只面向ASCII),那么通过设置这些环境变量,特别是LANG,就可能给这些程序带来一些干扰。

例如,如果将LANG=zh_CN.UTF-8,当你使用svn的时候,就可能有如下警告:
       svn: warning: cannot set LC_CTYPE locale
       svn: warning: environment variable LANG is zh_CN.UTF-8
       svn: warning: please check that your locale name is correct
事实上,我们可以分别设置LANG, LC_CTYPE, LC_ALL,以求取得一个影响最小的解决方法,使得:1)能够启动应用程序对unicode的支持,如果他们真的支持的话;2)不干扰那些对unicode支持不全面的应用程序。

我的经验是,尽量不去改动LANG,而根据系统的具体配置,设置LC_CTYPE及LC_ALL。例如,将LC_ALL=C,而保留LANG=en_US.UTF-8,那么就能使GCC产生用户友好的编译错误及警告消息,又能与svn等相安无事。

2、解决方式:解决方法很简单,修改/etc/profile:

sudo vi /etc/profile
加入一行:
export LC_ALL=C
source /etc/profile

自己服务器配置信息展示如下:

LANG=ZH_cn
JAVA_HOME=/usr/java/jdk
ANT_HOME=/usr/java/ant
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME ANT_HOME  PATH CLASSPATH

export M2_HOME=/usr/local/apache-maven-3.0.5
PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
export RUN_AS_USER=root
export LC_ALL=C

ok了!!!



你可能感兴趣的:(svn)