web-dev-qa-db-ja.com

Windowsコンソールでutf-8を表示する方法

私は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()
15
russo

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のコメントに記載されているように、表示しようとしている文字をサポートするフォントでコンソールが構成されていることを確認することも重要です。

15
Mark Ransom

Nevereverever use setdefaultencoding。 Unicode文字列をstdioに書き込む場合は、それらを明示的にエンコードします。 setdefaultencodingをいじくり回すと、stdlibモジュールとサードパーティモジュールが同様に、発生してはならないときにstrunicodeの間の暗黙の変換を許可することにより、恐ろしい微妙な方法で壊れます。

はい、問題はコードページが正しく設定されていない可能性が高いです。ただし、_os.popen_を使用してもコードページは変更されません。新しいシェルを生成し、itsコードページを変更してから、コンソールにまったく影響を与えずにすぐに終了します。私は個人的にウィンドウにあまり詳しくないので、pythonプログラム内からコンソールのコードページを変更する方法を説明できませんでした。

前述のように、Pythonからutf-8を介してUnicodeデータを適切に表示する方法は、文字列を出力する前に明示的にエンコードすることです。print s.encode('utf-8')

10
habnabit

コンソールコードページの変更は不要であり、機能しません(特に、65001に設定すると Pythonバグ になります)。詳細、およびコードページに関係なくUnicode文字をコンソールに出力する方法については、 この質問 を参照してください。

6
Daira Hopwood

Windowsは、コンソールでUTF-8を適切にサポートしていません。コンソールに日本語を表示するために私が知っている唯一の方法は、(XPの場合)コントロールパネルの[地域と言語のオプション]、[詳細設定]タブ、[非Unicodeプログラムの言語]を日本語に変更することです。再起動後、コンソールを開き、「chcp」を実行して、日本語コンソールのコードページを確認します。次に、正しいコードページで明示的にエンコードされたUnicode文字列またはバイト文字列を出力します。

3
Mark Tolonen