Mercurial的showconfig具有正确的编码?

时间:2012-04-15 23:11:15

标签: python unicode encoding mercurial

我希望使用hg showconfig获取我的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。

1 个答案:

答案 0 :(得分: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返回的cp1252,并在控制台中解码为cp850或cp437:

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

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

>>> 'maçã'.encode('cp850').decode('cp1252')
'ma‡Æ'