- 208 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 13:23:12 .net]
- >>197
> Python の日本語の扱いが良く分かりません。 > Python 嫌いになりそうです。>< 標準出力がリダイレクトされていない場合、Python の print 文は 与えられた Unicode 文字列を自動的に cp932 等の実行環境固有のエンコーディングで エンコードして印字するようになっている。これは Python インタプリタを 対話的に利用するときには便利な仕組みだ。「実行環境固有のエンコーディング」が 具体的に何であるかは sys.stdout.encoding を見れば分かる。 一方、標準出力がファイル等にリダイレクトされている場合、 どのエンコーディングで文字列をエンコードすべきかを決めるのは難しい問題だ。 cp932 がいいかもしれないし用途によっては utf-8 や iso-8859-1 の方がいいかも知れない。 つまり、Python の立場からは標準出力をリダイレクトする場合のエンコーディングを これと決めることができない。このことは、標準出力をリダイレクトしているときには sys.stdout.encoding が None になることから分かる。 この場合、print 文は sys.stdout.encoding の代わりに sys.getdefaultencoding() が返す エンコーディングでエンコードして出力する。このエンコーディングは Python の出荷時の 設定では ascii になっているので、日本語等を含む Unicode 文字列を print しようとすると 実行時エラーになる。 結局のところ、標準出力をファイルにリダイレクトできるようにプログラムを書くには sys.stdout.encoding による自動エンコードに頼らないようにしなければいけないということだ。 個人的には、Unicode 文字列をファイルなり標準出力なりに書き出すときは 明示的にエンコードするように心がけるべきだと考えている。暗黙の自動エンコードに 頼るとロクなことがない。
|
![](http://yomi.mobi/qr.gif)
|