Pythonについて(アンチ専用) at TECH
[2ch|▼Menu]
208:デフォルトの名無しさん
08/06/07 13:23:12
>>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 文字列をファイルなり標準出力なりに書き出すときは
明示的にエンコードするように心がけるべきだと考えている。暗黙の自動エンコードに
頼るとロクなことがない。


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5378日前に更新/248 KB
担当:undef