2012-04-15 10 views
0

hg showconfigを使用してMercurialリポジトリへのルートパスを取得し、bundle.mainreporootを取得したいとします。ルートパスにASCII以外の文字が含まれている場合は、D:\maçã\asdです。Mercurialのshowconfigに適切なエンコーディングがありますか?

hg showconfigの出力は次のとおりです。

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

私はCP850をコードしているWindows 7のPowerShellでこれを実行しています。私はMercurialに適切なエンコーディングcp850でshowconfigを出力するように伝えたいと思います。私は例えば成功したhg showconfig --encoding cp850を試しました。

þçのUnicodeコード・ポイントU + 00E7(私は必要な正しい文字)のように見え、また、CP1252でçあるCP850 \xE7にある文字。

+0

シェルが賢明なエンコーディング(utf-8)を使用するのは意味をなさないでしょうか?または、コードページを使用する必要がある深刻な理由がありますが、これは時代遅れと認識されていますか? –

+0

@ChrisMorgan、Windowsはうっかり、UTF-8でうんざりです。コンソールで。 –

+0

@ MarkTolonen:これはPowerShellで、通常の端末ではありません。それは、それがPowerShellターミナルで実行されている限り、システムターミナルで実行されていない限り、Unicode(UTF-8ではなくUTF-16LE)に対応できるはずです。 –

答えて

1

コマンドを実行する前にコードページを変更すると役立ちます。米国のWindowsでは、コンソールにはcp437、非UnicodeのGUIプログラムにはWindows-1252が使用されています。何らかの理由で、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、CP1252はCP850かCP437などのMercurialで返されると、コンソールにデコードされ、あなたが見てきた三つの異なる文字列によると:

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

あなたのペーストビンコードはcp1252としてデコードされたcp850です:

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

申し訳ありませんが、これは私が持っているものです: 'PS C:\ Users \ Falci \ asd> chcp \ nアクティブなコードページ:437 \ n PS C:\ Users \ Falci \ asd> hg showconfig bundle PS2:\ Users \ Falci \ asd> chp 1252 \ n アクティブコードページ:1252 \ n PS C:\ Users \ Falci \ asd> hg showconfig bundle.mainreporoot \ n C:\ Users \ Falci \ asd' これは、質問で使用したコンピュータとは別のコンピュータで実行されました。 showconfigの出力は 'C:\ Users \Falcão\ asd'でなければなりません。後でその最初のコンピュータでソリューションを再試行できます。 –

+0

@STALTZ、あなたのPowerShellのプロンプトでも間違った値が表示されます。 Hgが間違っていても、私のことはできません。コードページではデフォルトでcp437が表示されるため、代わりにcp850が必要ですか? –

+0

私の最初のコメントを無視してみてください。私は質問に使用したのと同じコンピュータで実行しました。面白い結果が出ました:http://pastebin.com/QzCCfhCM。いずれにせよ、私は今私の問題を解決したと思う。実際に私はPowerShellを直接使用しているわけではありませんが、私はMercenialを含むPopenを通してシェルプログラムを実行しているPythonスクリプトを持っていますので、showconfigから適切な出力を得る方法を見つけました。 「何らかの理由で、Mercurialはcp1252を使用しています」というヒントは私にとっては十分であったので、解決しているとマークしています。 –

関連する問題