mercurial由于仓库内部编码,使用的是UTF-8,而 windows 上的文件名采用却是ASCII(中文环境下就是cp936)。这样导致遇到文件名有中文的,就会抛异常。
可以用 mercurial 的一个扩展 hg-fixutf8 来搞定,但这个扩展还有点缺陷,国人在其基础上做了小改动,代码可见下面的 mercurial 仓库
https://bitbucket.org/tinyfish/hg-fixutf8
启用此扩展后配合 TortoiseHG 使用,本人未见异常。
但在命令行下使用常会抛异常(如:hg log),原因是由于界面翻译后的字符串,和来自仓库的历史所用字符串,两者编码不一致导致rawprint不能正确解编码。最简单的办法,就是在命令行下设置:
set LANG=en_US
禁用 gettext。此方法的缺点是界面语言英文的(不过些微懂点英文也没什么障碍,外加mercurial的语言包,本来就没有100%汉化好)。
或:
set HGENCODING=utf-8
控制 gettext 返回的字符的编码。此方法能保证界面语言是中文,但本人没完全的测过……