読者です 読者をやめる 読者になる 読者になる

実行時にdefaultencodingを変更する

Python

某巨大SNSで見かけた話題で、ちょっと気になったのでこちらで。


sys.setdefaultencodingというメソッドはインタプリタ初期化時にモジュールから削除されてしまうので、実行時に呼び出すことはできません。

>>> import sys
>>> sys.setdefaultencoding('cp932')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'


実行時に変更したい場合の一番楽な方法は、sysモジュールをreloadすることです。

>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('cp932')


しかしながら、実行時にdefaultencodingを変更するのは禁じ手中の禁じ手です。Pythonユニコードの扱いを理解していれば、通常は全く困ることがありませんし、困ることがあるのはPythonユニコードの扱いを理解していない人間が書いたライブラリやフレームワーク、もしくは、出入力のエンコーディングに、asciiやutf-8等の特定のエンコーディングを想定しているライブラリ・フレームワークを使いたい場合くらいのものです。


どうしてもアプリケーション・プロジェクトごとにPythonのdefaultencodingを変更する必要があるならば、僕ならば、virtual-pythonで複数のPython環境を作り、sitecustomize.pyでdefaultencodingを変更する方法を選びます。

【参考】ウノウラボ Python開発環境を整えよう
http://labs.unoh.net/2007/04/python.html