標準出力の文字コードと自動変換
Pythonにおいてprint文を使って標準出力に対して文字列を出力する場合、プログラムで設定されている文字コードから標準出力で使用する文字コードに対して自動的に文字コードの変換が行われます。その為、プログラムの文字コードを何に設定していたとしても気にする必要はありません。
Windowsのコマンドプロンプトの文字コードは「cp932」となっています。文字コードを確認するにはコマンドプロンプト上で「chcp」と実行して下さい。
またPythonで設定されている標準入出力の際の文字コードは次のプログラムを実行すると確認することが出来ます。
import sys print sys.stdin.encoding print sys.stdout.encoding print sys.stderr.encoding
実際に実行してみると次のように表示されます。
cp932 cp932 cp932
このように私の環境では標準入力、標準出力、標準エラー出力の文字コードは「cp932」に設定されていることが分かります。
このため、プログラムから標準出力に出力される場合は「cp932」に変換して出力が行われます。先ほど確認したとおりコマンドプロンプトの文字コードも「cp932」ですので文字化けなどを起こさずに出力が行われます。
なお実際にはコマンドプロンプトに設定されている環境設定などを読み取って設定しているようです。例えばコマンドプロンプトの文字コードを変更してから先ほどのプログラムを実行すると、コマンドプロンプトで設定された文字コードが出力されます。よって標準出力をリダイレクトしてファイルに出力するようにしている場合などを除けば、文字コードをあまり意識することなく標準出力へ出力することが出来ます。
では実際に試してみます。
#coding: UTF-8 import sys print sys.stdin.encoding print sys.stdout.encoding print sys.stderr.encoding
上記を「test2-1.py」として保存します。そして次のように実行して下さい。
次にコマンドプロンプトで「chcp 65001」を実行して文字コードをUTF-8に変更してから同じプログラムを実行してみます。
このように現在設定されている標準出力の文字コードに合わせて設定されていることが確認できます。
( Written by Tatsuo Ikura )