文字列を扱う場合、unicode型と、str型というのがありますが、これらの扱いが正直大変。初心者が何かとつまずく所だと思いますし、私自身もつまづきましたので、まとめてみました。(間違いあったらご指摘ください)unicode型とはpythonが独自に扱う文字列型で、str型は通常はutf-8やshift-jisといったある文字コードでエンコードされた文字列型です。文字列の前に付けるとunicode型になります。u1ソースコードをpython独自のunicode型で書くことはできないので、実行時に上記のu1はソースコードの文字コードをunicodeに変換する必要があります。この時、pythonはデフォルトでasciiしか扱えないため、以下のように実行するとエラーになります。detailこれを避けるために用いられるのが、ソースコードの文字コード指定です。これはpythonとしては結構常識ですよね。utf-8やshifit-jisなどに変換することをエンコード、逆をデコードと呼びます。今自分がどちらの型を扱っているか分からない場合はtype関数で見てみましょう。中に入っている文字コードがそのまま出力されます。s1にshift-jisの文字が入っていて、端末の文字コードがutf-8だと文字化けします。次に、u1とs1と結合してprintしてみます。range(128)はい。これは、ptyhonは結合時に一端s1をunicodeにデコードしようとするのですが、デフォルトではascii文字列しかデコードできないため、エラーになるのです。これがめちゃくちゃ分かりづらい。ソースコードや標準出力の文字コードは自動で変換してくれるのに、内部の文字コード変換は自動でやってくれないのです。よって、以下のように手動でs1の中身はutf-8ですよとpythonに教えて、デコード(unicodeに変換)する必要があります。./study.pyこれはUnicode型ですこれはstr型です無事表示されました。変換が必要ないので、u1を予め手動でエンコード(utf-8に変換)しても正常に処理できます。./study.pyこれはUnicode型ですこれはstr型ですエンコードの文字コードを間違えてもpythonはstr型をそのまま出力するだけなので、文字化けします。./study.py?????Unicode?^???これはstr型ですいちいち面倒だなと思う場合は、pythonのデフォルトエンコーディングをutf-8にしてしまう方法もありです。デフォルトを変えてしまうので、システムが大きいと思わぬ所で不具合が出る可能性があるので注意が必要です。./study.pyこれはUnicode型ですこれはstr型ですちなみに、setdefaultencoding()は、実行準備完了時に削除される関数らしいので、再度呼び出したい場合はreloadをする必要があります。変更すれば、reloadは必要なくなるようです。自分で書くちょっとしたプログラムなら、この方法が一番楽ちんそうですね。コメントをキャンセルメールアドレスが公開されることはありません。2の拡張機能と不足機能Thunderbirdに以下のアドオンをインストールしてみました。3aの電池消費が以下のようにひどく困ってました。