V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bluesky139
V2EX  ›  程序员

hg 跨平台使用,文件名乱码

  •  
  •   bluesky139 ·
    bluesky139 · 2016-11-04 12:18:19 +08:00 · 3081 次点击
    这是一个创建于 2941 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道这里用 hg 的人多不,我在 windows 下创建的 repo ,在 windows 下克隆使用一切正常,但是到 mac 下克隆出来的中文文件名会乱码,有什么解么?

    网上查了各种方法都不对,包括 FixUtf8 , set LANG environment ,传递 encoding 参数,还是说我弄错了什么。

    10 条回复    2016-11-04 18:54:32 +08:00
    neoblackcap
        1
    neoblackcap  
       2016-11-04 12:29:02 +08:00
    你确认是 hg 的问题而不是本身文件的编码问题?
    congeec
        2
    congeec  
       2016-11-04 12:30:11 +08:00
    你在 Windows 下文件的中文名编码可能是 GBK, GB18030, UTF-16-LE, UTF-8. 改 OS X 的 Terminal.app (如果你用这个 Console )输出字符串的编码和 Shell 里的 LC 打头的编码包括 LANG ),都改成跟 Windows 一致的。
    P.S. 我不用 hg ,可能 hg 本身也能指定 Encoding ,这个你自己看着办了
    bluesky139
        3
    bluesky139  
    OP
       2016-11-04 12:33:59 +08:00 via Android
    @neoblackcap 不是文件编码,是文件名编码。
    jarlyyn
        4
    jarlyyn  
       2016-11-04 13:23:01 +08:00
    为什么会有中文文件名……
    这是坑自己啊
    bluesky139
        5
    bluesky139  
    OP
       2016-11-04 13:25:15 +08:00
    @jarlyyn 非程序人员使用的一些文件。
    BOYPT
        6
    BOYPT  
       2016-11-04 13:34:12 +08:00
    先确认仓库里面的文件名是什么编码, 如果那文件当初在 win 提交的,那大可能仓库里面就已经是 gbk 编码的文件名,因此 fixutf8 插件没用, fixutf8 插件是对仓库中 utf8 文件名的文件在 win 平台 checkout 时候使用本地编码的补丁,因此楼主需要一个“反 fixutf8 ”插件……(就是把 fixutf8 里面几个变量倒过来)

    。。上次使用 mercurial 都 5 6 年前了,就是因为这类坑,但是这个是设计问题, hg 设计是保持提交者的原汁原味,所以比较无解的。
    所以楼主有两选择:
    1. 自己本地弄个反 fixutf8
    2. 修改仓库内为 utf8 ,参考 http://serverfault.com/questions/319070/mercurial-convert-filename-encoding
    neoblackcap
        7
    neoblackcap  
       2016-11-04 13:37:17 +08:00
    @bluesky139 https://www.selenic.com/mercurial/hg.1.html#win32mbcs 试试这个,不过 mercurial 官方是说请使用 ascii 作为文件名来在跨平台上面使用
    zhuangzhuang1988
        8
    zhuangzhuang1988  
       2016-11-04 13:50:15 +08:00
    调试一下 hg 就好了...
    zhuangzhuang1988
        9
    zhuangzhuang1988  
       2016-11-04 14:04:18 +08:00
    就像这样, 最快找问题的办法, 调试.

    introom
        10
    introom  
       2016-11-04 18:54:32 +08:00 via Android
    我不能给建设性的意见,不过我以上读过 mercurial 的源码,很简单,所以你要是半天否解决不了,不如花半天时间看它代码,多半能找出哪一步是问题所在,这也是我解决问题的办法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:44 · PVG 03:44 · LAX 11:44 · JFK 14:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.