Unicode文字列とバイト文字列の結合

Unicode文字列とバイト文字列を結合する場合、バイト文字列は現在のシステムのデフォルトエンコーディングによってUnicode文字列に変換されます。つまり以下の二つプログラムは同じ結果となります。

# encoding=utf8
str1 = u"おはよう"
str2 = "ございます"
print str1 + str2
# encoding=utf8
str1 = u"おはよう"
str2 = "ございます"
print str1 + str2.decode(sys.getdefaultencoding())

システムのデフォルトエンコーディング名はsys.getdefaultencoding( )で取得できます。当然、デフォルトのエンコーディングソースコードエンコーディングが違えばエラーになります。


デフォルトのエンコーディングは以下のようにして設定します。

# Python25/Lib/site-packages/sitecustomize.py
sys.setdefaultencoding("shift_jis")

sitecustomeizeモジュールは初期化の際にインポートされます。また、sys.setdefaultencoding( )は初期化で呼び出された後はsysモジュールから削除されるので、プログラムごとにデフォルトのエンコーディングを設定することはできません。そして、このような設定に依存したプログラムは他の環境では動かない可能性があるので注意が必要です。