知らないということは無謀ということ
CGIをPython 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が整備されたころに、そちらに移っていきたいと思います。