如何令 mercurial 2.x 和 3.x 支持 utf-8 中文名的文件?

狂男风 发布于 2015/05/02 14:49
阅读 427
收藏 0

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

mercurial 默认使用本地 filesystem 的编码来存储文件名,这在使用 utf-8 的 linux 下是完全没有问题的。但是 windows 使用的是 ansi 编码集,针对不同的语言版本使用不同的具体编码,如简体中文操作系统大多使用 gb2312、gbk、gb18030。mercurial 在不同编码系统中处理数据的时候并不会对字符串进行转换,也就是说 linux 下用 utf-8 存储的文件名字符串在 windows 下将会使用 gbk 解码,这就造成 linux 下推送的文件在 windows 下同步(或反之)后中文名变成乱码。
bitbucket 运行的不是简体中文 windows,使用的编码肯定不是 gbk,将本地库推送到 bitbucket后,在线查看时文件名就会变成乱码。所以只能在本地同步时转换 windows 文件名的编码来解决这个问题。
我在网络上搜索了这个问题,在 mercurial 的官网上发现了 FixUtf8 Extension 这个插件可以解决这个问题,但它已经很久没有更新了。而且这个页面上也写着“incompatible with Mercurial 2.0 and later”。只支持 mercurial 1.x,不支持 2.x,更遑论 3.x。
然后我又在官网上发现了 Windows UTF-8 Plan,这是个在 windows 平台将本地编码转换为utf8 的项目。可这个项目进展太慢了,12 年 5 月立项,最后一次公开的进度更新是 14 年 6 月,不知道是不是陷入了停滞。
目前采用甚麽办法才能在 windows 下的 mercurial 里正常同步中文名的文件?
加载中
0
狂男风
狂男风
纠正几个错误:windows下的文件系统和文本并不是同一套编码,linux下的extX用的是utf8这没有疑问。但是windows下的ntfs用的是utf16le(而非windows系统处理文本或字符串时的本地语言编码如gbk)。所以现在的疑问是,如何令mercurial在ntfs的utf16le与linux的utf8之间传输文件时保持文件名正确解析?
返回顶部
顶部