2011-08-10 4 views
11

Windows XPでUTF8をサポートするようにコンソールを設定し、Pythonでそれを検出して動作させたいと考えています。コンソールでWindows XPでUTF8で印刷するようにする

これまでのところ、私の試みは:

C:\Documents and Settings\Philippe>C:\Python25\python.exe 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print u'é' 
é 
>>> import sys 
>>> sys.stdout.encoding 
'cp437' 
>>> quit() 

ので、デフォルトで私はCP437で午前のpythonはうまくことを検出しました。

C:\Documents and Settings\Philippe>chcp 65001 
Active code page: 65001 

C:\Documents and Settings\Philippe>python 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'cp65001' 
>>> print u'é' 
C:\Documents and Settings\Philippe> 

UTF8に印刷するPythonのクラッシュを作るようですが、今...

+0

あなたが最初の場所で、ここでUTF8印刷考える何を作るのか? –

+0

私はちょうど私の答えを更新しました - これはPython 3.3で追加されました。 –

+0

も参照してください:http://stackoverflow.com/a/30505612/788700 – Adobe

答えて

8

I would like to configure my console on Windows XP to support UTF8

私はそれが起こると思います。

65001コードページはバグです。いくつかのstdio呼び出しは正しく動作せず、多くのツールを壊します。手動でエンコーディングとしてcp65001登録できなくなり:

def cp65001(name): 
    if name.lower()=='cp65001': 
     return codecs.lookup('utf-8') 

codecs.register(cp65001) 

、これはprint u'some unicode string'にあなたを可能にする、それはあなたがそのUnicode文字列に非ASCII文字を書くことはできません。 ASCII以外のUTF-8シーケンスを直接バイト文字列として書き込もうとするときと同じ異常なエラー(IOError 0など)が発生します。

残念ながら、UTF-8はWindowsの下で2番目の市民です。 NTのUnicodeモデルはUTF-8が存在する前に作成されていたため、一貫性のあるUnicodeが必要な場所では、コード単位の2バイトエンコーディング(UTF-16、もともとUCS-2)を使用することになりました。 Cのstdioで書かれた多くのポータブルアプリケーションや言語(Pythonなど)のようなバイト文字列を使用すると、そのモデルに適合しません。

WindowsのUnicodeコンソールコール(WriteConsoleWなど)をポータブルC stdioの代わりに使用するようにPythonを書き換えると、パイピングやファイルへのリダイレクトなどのシェルトリックでうまく動作しません。 (結果がまったく動作していないうちに、デフォルトのターミナルフォントからTTFに変更する必要はありません...)

最終的にUTF-8をサポートしているコマンドラインが必要な場合stdioベースのアプリケーションでは、CygwinやPythonのIDLEやpywin32のPythonWinなど、故意にサポートしているWindowsコンソールの代わりに使う方がよいでしょう。

+0

それでは、私はcp437で作業することを学ぶ方が良いでしょう... –

4

私は、Python 2.7で同じことをしようとすると、私はimport sysにエラーが出るようだ:

LookupError: unknown encoding: cp65001

これはに意味私はPythonが特別なWindows UTF-8コードページの使い方を知らず、2.5が状況をうまく処理しなかったことを私に教えてくれました。

は、どうやらこれは調査とPython 3.2で修正されていないた:http://bugs.python.org/issue6058

更新:What's New In Python 3.3では、新機能としてcp65001サポートを示しています。

+0

いいえ、 'chcp 65001'がアクティブな場合はPython 3.2がクラッシュします。その特定の問題は、無効ではなく、修正されていませんでした。 –

+0

@マークトローネン、更新していただきありがとうございます。明らかに私の読解能力には改善が必要です。 –

0

Windows Vistaを使用しているPythonスクリプトから、ユーロ記号をcmdコンソールに表示する際に問題が発生しました。

Fistでは、フォントがLucinda Consoleで、動作しないラスタフォントではないことを確認する必要があります。これは、コンソールウィンドウのドロップダウンメニューでコンソールのデフォルトプロパティを設定し、コンソールウィンドウをcmd.exeで再起動することで実行できます。

第2に、私がcmdを実行すると、chcp 1252でコードページを設定しました。

第3に、私のエディタ(Notepad ++)が正しいエンコード設定を持っていることを確認します。メモ帳++のドロップダウンメニューEncodingEncode in UTF-8を選択します。

それは私のために働いた。あなたの勝利で

0

セットこの:

set PYTHONIOENCODING=utf-8 
関連する問題