Pythonと日本語表示と文字コード、unicode 、str 、utf-8 、shift-jis 、、、
Pythonは使いやすい覚えやすい気持ちいいとまで言う人もいる。たしかにその通りだと思った。しかし、日本語を使おうとした時に急に気持ち良くなくなる。そう感じたのは僕だけではないはずだ。
ということで今日の日記のネタはPythonと日本語となりました。
(WindowsXPにココから "Python 2.5.1 Windows installer" をインストールした環境でテストしています。)
- まずは、あなたが書いたコードはutf-8で保存する。そして、そのコードの先頭には以下を記入する。
# -*- coding: utf-8 -*-
あなたはエディタに何を使っていますか? 秀丸、メモ帳、vim、meadow、或いは Python Scripter、eclipse ? いずれにしてもファイルを保存する時のエンコードはutf-8にすべし。
- では早速気持ちよくない(表示が文字化けする!)例。
# -*- coding: utf-8 -*- jstr = "日本語" print jstr #日本語を表示してみる。 → 文字化けする。
ちょっと気持ちよくしてみる。
# -*- coding: utf-8 -*- jstr = u"日本語" print jstr #日本語を表示してみる。 → 文字化けしない。
違う方法で...
# -*- coding: utf-8 -*- jstr = "日本語" print jstr.decode('utf-8') #ASCII→utf-8 しているのでなく #utf-8→unicode にデコードしている。 #文字化けしないで表示。
違う方法で... たぶんこれがいちばん混乱するところ。 utf-8をunicodeに変換する。なんでこの一個上のサンプルはデコードで今回は変換なのか!
# -*- coding: utf-8 -*- jstr = "日本語" print unicode(jstr,'utf-8') #utf-8→unicodeに変換 #文字化けしないで表示。
この次はエラーになる。さっきファイルはutf-8で保存するべし!としてutf-8で保存してるからね。shift-jis→unicodeはエラーとなる。
# -*- coding: utf-8 -*- jstr = "日本語" print unicode(jstr,'shift-jis') #shift-jis→unicodeに変換 #これはエラーになる。
さらに、エンコードってのもある。
一番最後の四行が文字化けせずに表示できるのは私のwindowsのコマンドシェルのコードページが cp932 だから。あなたの環境でのコードページはコマンドラインで chcp とタイプして調べてください。
# -*- coding: utf-8 -*- jstr = u"日本語" print jstr.encode('iso-2022-jp') print jstr.encode('euc-jp') print jstr.encode('euc-jisx0213') print jstr.encode('euc-jis-2004') print jstr.encode('iso-2022-jp') print jstr.encode('iso-2022-jp-1') print jstr.encode('iso-2022-jp-2') print jstr.encode('iso-2022-jp-3') print jstr.encode('iso-2022-jp-ext') print jstr.encode('iso-2022-jp-2004') print jstr.encode('utf-7') print jstr.encode('utf-8') print jstr.encode('utf-16') print jstr.encode('utf-16-be') print jstr.encode('utf-16-le') print jstr.encode('cp932') #文字化けしない。 print jstr.encode('shift-jis') #文字化けしない。 print jstr.encode('shift-jisx0213') #文字化けしない。 print jstr.encode('shift-jis-2004') #文字化けしない。
今回は文字化けさせずに表示させるだけでもちょっと気持ちよくなったかなぁ。
次回につづく。
参考リンク:
参考図書:
Unicode標準入門 | |
Tony Graham 翔泳社 2001-05 売り上げランキング : 167572 おすすめ平均 ISO/IEC 10646 Localization、Internationalizationの虎の巻です Amazonで詳しく見る by G-Tools |
文字コード超研究 | |
ラトルズ 2003-07 売り上げランキング : 95525 おすすめ平均 隠れた名著 まぁまぁ 類似所の中では大変読みやすい書籍 Amazonで詳しく見る by G-Tools |