標準入出力のエンコード

前回できるだけ少ないコード改変でEclipseでもコマンドプロンプトでも文字化けしない方法について書いたのですが、コメントで
"sys.stdout.encoding"という属性があることを教えていただきました。
これは現在の実行環境で標準入出力をどの文字コードで行なっているかを示しているもので

# coding: utf-8

import sys

print sys.stdout.encoding

Eclipseで実行すれば"utf-8"、コマンドプロンプトで実行すれば"cp932"と表示されます。

ということはこれと前回のコードを組み合わせればどんな環境でも文字化けしないようにできるんじゃ・・
と思い下記のように書いてみました。

# coding: utf-8

import sys
import codecs

enc = sys.stdout.encoding

sys.stdout = codecs.getwriter(enc)(sys.stdout)  # 出力
sys.stdin = codecs.getreader(enc)(sys.stdin)  # 入力

a = unicode(raw_input(u"何か入力してください。"))

print a

これでEclipseでもコマンドプロンプトでも文字化けしないはず!と思ったのですがそうは問屋がおろしませんでした。

このコードはコマンドプロンプトでは期待通りの動作なのですがEclipseではうまく動きません。
それも例外やエラーが出るのではなく固まってしまうため原因不明です。
(6/6追記。これはEclipseが入力の終わりを待っているためでCtrl+Zで動くそうです。詳しくはコメント欄を御覧ください。)
これがEclipseの仕様のせいなのかPythonの書き方としてまちがっているからなのかがよくわからないので対策のしようがないのです・・(^_^;)

とかくエンコード周りはややこしい・・。