Mercurial提交消息和日志,支持什么编码,Hg是否关心?

ang*_*son 6 unicode mercurial

我尝试通过我的Mercurial包装器库进行简单的提交,使用简单的文本Unicode:æøåÆØÅ作为我的提交消息.这将写入文本文件并使用适当的参数提供给Mercurial:

hg commit --logfile FILE
Run Code Online (Sandbox Code Playgroud)

如果我随后使用TortoiseHg查看存储库,则可以正确再现字符.在控制台上,它们被破坏了:

[C:\Temp] :hg log
changeset:   0:6a0911410128
tag:         tip
user:        Lasse V. Karlsen 
date:        Wed Dec 01 21:48:54 2010 +0100
summary:     Unicode:?ª???Ñ?å?ÿ?à

如果我将输出重定向hg log到文件,并将其打开,æøåÆØÅ则可以正确再现.

所以,我的问题是:

  • 我可以要求hg直接将日志写入文件,还是必须重定向标准输出?
  • 这会导致控制台的python编码问题,即.一些角色会hg崩溃而不是仅仅破坏输出?
  • 是否存在我应该遵守的提交消息的已知支持编码?

或者就是这么简单:

  • Mercurial并不关心,它接受我提供的文件的内容,无论内容如何,​​并将其存储为提交消息.在生成日志时,它会将它转储回控制台,成为Python控制台输出库在这方面的限制的牺牲品吗?

pyf*_*unc 8

以下可能无法解决问题,但可以帮助调试它.

查看:https://www.mercurial-scm.org/wiki/EncodingStrategy

如果我将hg log的输出重定向到文件,然后将其打开,则可以正确再现æøåÆØÅ.

所以至少mercurial正确地存储提交信息.它只是输出搞砸了.

有些工作沿着这些方向发生,但与此无关

[编辑:错过了你在Windows上的事实]

请参阅有关如何处理字符集兼容性问题的最后一段:https://www.mercurial-scm.org/wiki/CharacterEncodingOnWindows

它说:

  • 设置您的控制台代码页以匹配您的系统代码页
  • 使用环境变量覆盖Mercurial的编码
    • 设置HGENCODING将覆盖检测到的系统字符集.
  • 使用命令行选项覆盖Mercurial的编码
    • 使用全局--encoding选项将允许您在每个命令上设置首选编码.
  • 使用基于GUI的工具与Mercurial进行交互
    • 通过完全消除那个讨厌的控制台,这也消除了这个问题.
  • 使用Linux/UNIX和UTF-8
    • 这让比尔盖茨哭了.

  • 我没有得到"比尔盖茨"的参考.UTF-8在Windows上与其他地方一样是事实上的标准.记事本保存UTF-8.我的编辑器保存了UTF-8.Mercurial然后进去并故意搞砸它,以"避免让BG哭泣"并且让_me_哭泣. (5认同)