知らないということは無謀ということ

CGIPython 3.xで作っていきたい、そう思ってチャレンジを開始した初日に、出力する文字コードでつまづいて、私はWebでの文字コードUTF-8にしたい、なのにcp932でしか出力できない、いったいどうしたらいいのかわからない。迷ってしまっていたんですね。

Pythonは3.0からPrint()がBytes型を受け付けなくなってしまって、結果出力する文字コードを選べなくなってしまったようなんです。私の職場での環境はWindows Vista、ゆえにコンソールはcp932を要求している。以前のPython(2.x系)なら、多分、次のようにやればいけた。

print u'文字列'.encode('utf-8')

もしくは

print codecs.encode(u'文字列', 'utf-8')

あるいは、Webの検索結果に見付けたやりかた:

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

もしくは

sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)

しかし、Python 3.0ではこれが使えない。困ったなあ。

なので、クローズドなところで聞いてみたところ、「sys.stdoutをbinaryでかく。」というやりかたを教えていただけて、けど、このやりかたは私の理解を超えているんですけど! でも、これも勉強だなあ。

そう思っていたら、Python 3.0はまだcgiまわりまで整備がいきとどいていないから、時期尚早ではないかというご意見いただきまして、そうかあ、私のような生齧りの人間が立ち入るには、少々危険な領域であったのかも知れないなあ。そのように思ったから、現実的な手段として、Rubyあたりに移ろうかといったんです。

よりによってPythonのコミュニティで!

ええと、Python 2.6.1で頑張りたいと思います。それで、Python 3.xが整備されたころに、そちらに移っていきたいと思います。