我希望使用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。
答案 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‡Æ'