subversion的svn命令行显示乱码的解决
以前一直遇到svn在命令行下显示的问题,我总是直接下载zip包,直接解压使用svn,因为控制台默认代码页为cp936,显示总是为乱码,使用时为省事,总是先
chcp 437
再切换回来
chcp 936
这样就可以看到正常的英文了。当然,这也是解决办法的一种,但中文OS下这么优秀的一个用apr-iconv的工具无法显示中文太可惜了。
今天看了apr_iconv的相关库的说明,原来,svn使用了libapriconv.dll来实现本地化的,apr_iconv是使用环境变量
APR_ICONV_PATH
来获取iconv目录,从而得到相关的.so文件。在中文环境下,因为没找到正确的iconv目录,所以无法得到正确的cp936.so,所以显示成了乱码。
相关代码如下:
/* Fall back on APR_ICONV_PATH if APR_ICONVn_PATH isn't set...
* TODO: Drop support for "APR_ICONV_PATH" in apr-iconv 2.0
*/
if ((!apr_env_get(&ptr, APR_ICONV_PATH, subpool)
|| (!apr_env_get(&ptr, "APR_ICONV_PATH", subpool)))
&& !apr_filepath_list_split(&pathelts, ptr, subpool))
{
可以看到,apr-iconv 2.0以后会不这么使用了
所以,最官方的解决办法就是设置正确的APR_ICONV_PATH环境变量。比如:
set APR_ICONV_PATH=e:/svn/iconv
这里要注意的是,如果你的环境中还有其它软件使用了这个变量,那就有可能造成混淆,所以设置成系统环境变量的话要注意这个问题。