0

我想使用hg showconfigthen retrieving 获取我的 Mercurial 存储库的根路径bundle.mainreporoot。根路径有非 ASCII 字符,它是D:\maçã\asd.

的输出hg showconfig是:

...
bundle.mainreporoot=D:\maþÒ\asd
...

我在具有编码 cp850 的 Windows 7 Powershell 中运行它。我想告诉 Mercurial 以正确的编码 cp850 输出 showconfig。例如,我尝试过hg showconfig --encoding cp850但没有成功。

该字符þ在 cp850\xE7中,它看起来像 unicode 代码点 U+00E7 ç(我需要的正确字符),并且也在çcp1252 中。

4

1 回答 1

3

在运行命令之前更改代码页会有所帮助。美国 Windows 将 cp437 用于控制台,将 Windows-1252 用于非 Unicode GUI 程序。无论出于何种原因,Mercurial 都在使用 cp1252。如果您使用的不是美国 Windows,则可能需要不同的代码页。

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS W:\maçã\asd> hg showconfig bundle.mainreporoot
W:\maτπ\asd
PS W:\maçã\asd> chcp 1252
Active code page: 1252
PS W:\maçã\asd> hg showconfig bundle.mainreporoot
W:\maçã\asd

编辑

根据 Python3,您看到的三个不同字符串是 Mercurial 返回并在控制台中解码为 cp850 或 cp437 的 cp1252:

>>> 'maçã'.encode('cp1252').decode('cp850')
'maþÒ'
>>> 'maçã'.encode('cp1252').decode('cp437')
'maτπ'

您的 pastebin 代码是 cp850 解码为 cp1252:

>>> 'maçã'.encode('cp850').decode('cp1252')
'ma‡Æ'
于 2012-04-16T01:51:27.370 回答