Windows下的 SlickEdit中,如果用SE内置的Subversion/CVS前端来操作代码库的话会发现所有的中文都被显示为乱码,而英文都正常。造成这个问题的主要原因就是SE在内部处理字符串用的是UTF8编码,而控制台端的svn/cvs工具在通过Shell与SE交互时用的实际上都是多字节码。这样就造成了乱码问题。
« Prev:SlickEdit华丽修改:双击括号自动选中匹配括号
authtest:Authentication FAILED: Operation not permitted:Next »
解决的方法很简单,只要在调用命令的前后各做一次编码转换即可。找到SE的底层CVS/SVN命令操作函数:cvsutil.e::_CVSPipeProcess()
在入口处把SE准备传递给Shell的命令由UTF8转换为多字节编码,代码页使用系统默认(也可以自己指定一个代码页,在第二个参数指定即可。如强制转换为简体中文:_UTF8ToMultiByte(command, 936)):
command = _UTF8ToMultiByte(command);
这样就可以让SE正确地把包含中文的文件名等参数传递给 CVS/SVN,解决不能checkout中文名文件的问题(表现为操作时返回svn缺少参数之类的错误)。
在这个函数末尾return之前,再做一次逆向转换:
StdOutData = _MultiByteToUTF8(StdOutData);
StdErrData = _MultiByteToUTF8(StdErrData);
这里把完成命令调用后的stdout和stderr由多字节编码转换为UTF8,供SE继续处理。解决SE的VCS图形界面显示中文乱码的问题。
经过上述改进以后,SE内置的Subversion Browser已经可以正常浏览中文目录:
在版本控制的History里也能看到文件的中文注释:
修改好的cvsutil.e已经传到盒子里了。
2010年06月3日 14:05
你好,我也遇到了同样的问题。你说的“SE的底层CVS/SVN命令操作函”我应该怎么找到呢?