私はWindows7でPython 2.6を使用しています
ここからいくつかのコードを借りました: Python、Unicode、およびWindowsコンソール
私の目標は、Windowsコンソールにuft-8文字列を表示できるようにすることです。
明らかにpython 2.6、
sys.setdefaultencoding()
サポートされなくなりました
ただし、reload(sys)を使用する前に作成しましたが、魔法のようにエラーは発生しませんでした。
このコードはエラーにはなりませんが、日本語のテキストの代わりに面白い文字が表示されます。 問題は、Windowsコンソールのコードページを正常に変更できなかったことが原因だと思います。
これらは私の試みですが、機能しません。
reload(sys)
sys.setdefaultencoding('utf-8')
print os.popen('chcp 65001').read()
sys.stdout.encoding = 'cp65001'
おそらくwin32consoleを使用してコードページを変更できますか?リンクしたWebサイトからコードを試しましたが、win32consoleからもエラーが発生しました..おそらくそのコード廃止されました。
これが私のコードです。エラーは発生しませんが、面白い文字が出力されます。
#coding=<utf8>
import os
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)
#print os.popen('chcp 65001').read()
print(sys.stdout.encoding)
sys.stdout.encoding = 'cp65001'
print(sys.stdout.encoding)
x = raw_input('press enter to continue')
a = 'こんにちは世界'#.decode('utf8')
print a
x = raw_input()
Python 2.6を使用しているとおっしゃっていますが、Python 3.3を使用できる場合は、これが最終的にサポートされていることがわかります。
Pythonを起動する前に、コマンドchcp 65001
を使用してください。
http://docs.python.org/dev/whatsnew/3.3.html#codecs を参照してください
Python 3.6では、Pythonはバイトレベルのコンソールインターフェイスを完全にバイパスし、を使用するため、chcp
コマンドを使用する必要はありません。代わりにネイティブUnicodeインターフェイス。 PEP 528:WindowsコンソールエンコーディングをUTF-8に変更 を参照してください。
@ mbom007のコメントに記載されているように、表示しようとしている文字をサポートするフォントでコンソールが構成されていることを確認することも重要です。
Nevereverever use setdefaultencoding
。 Unicode文字列をstdioに書き込む場合は、それらを明示的にエンコードします。 setdefaultencoding
をいじくり回すと、stdlibモジュールとサードパーティモジュールが同様に、発生してはならないときにstr
とunicode
の間の暗黙の変換を許可することにより、恐ろしい微妙な方法で壊れます。
はい、問題はコードページが正しく設定されていない可能性が高いです。ただし、_os.popen
_を使用してもコードページは変更されません。新しいシェルを生成し、itsコードページを変更してから、コンソールにまったく影響を与えずにすぐに終了します。私は個人的にウィンドウにあまり詳しくないので、pythonプログラム内からコンソールのコードページを変更する方法を説明できませんでした。
前述のように、Pythonからutf-8を介してUnicodeデータを適切に表示する方法は、文字列を出力する前に明示的にエンコードすることです。print s.encode('utf-8')
Windowsは、コンソールでUTF-8を適切にサポートしていません。コンソールに日本語を表示するために私が知っている唯一の方法は、(XPの場合)コントロールパネルの[地域と言語のオプション]、[詳細設定]タブ、[非Unicodeプログラムの言語]を日本語に変更することです。再起動後、コンソールを開き、「chcp」を実行して、日本語コンソールのコードページを確認します。次に、正しいコードページで明示的にエンコードされたUnicode文字列またはバイト文字列を出力します。