Pythonの日本語の扱い

昨日のエントリに掲載したhttp://code.google.com/edu/languages/google-python-class/index.htmlですが
すでに私が訳した部分も含む全体を日本語に訳されている方がいました。
手習い録: Google's Python Class

もっと早く気づいていれば・・・!
まぁ英語の勉強ができたと思ってプラスに考えよう(´∀`)

今日はPythonの日本語の扱いについて整理しておこうと思います。
ただ当然ながらバージョンによって日本語の扱いにも違いがあるようなので
2.x系の最新である2.7を基準に整理したいと思います。(私がそのバージョンをインストールしているので)

バージョン2.4以降のPythonには日本語コーデックが付属しているためshift_jis,euc-jpなどが標準で使えます。
その場合ソースコードの1行目か2行目でどのエンコードを使うかを指定する必要があります。

# coding: shift_jis
def Hello():
  print "こんにちは!シフトJISです" #コメントも日本語でかけます

if __name__=="__main__":
  Hello()

#こんにちは!シフトJISです(Windowsデフォルトの場合)

ただしこの方法はエンコード方法を指定しているだけなのでエラーがでることはないものの文字列は単なるバイト列であるため
文字列に関するメソッドなどは正しく動作してくれません。例えば下のコードのようにn番目の文字を表示したりはできません。

# coding: shift_jis
def Hello():
  a = "こんにちは!シフトJISです"
  print a
  print a[1]
  print a[2]

if __name__=="__main__":
  Hello()

#実行すると下のように表示される(Windowsデフォルト)
#こんにちは!シフトJISです
#ア
#(なにもなし)

そこでUnicodeを使います。Unicodeは文字列の前にuをつけて
u"文字列"とかくと自動的にUnicodeに変換されます。

# coding: shift_jis
def Hello():
  a = u"こんにちは!シフトJISです"
  print a
  print a[1]
  print a[2]

if __name__=="__main__":
  Hello()

#こんにちは!シフトJISです
#ん
#に

Unicodeであれば正規表現もそのまま利用できます。
Unicodeであればファイル名に全角文字があっても対応できます、がそもそもファイル名に日本語は使わないほうがいいのはまちがいありません。
参考:http://www.python.jp/Zope/articles/japanese/Python4Japanese-2

なお、Pythonと直接関係はないですがそもそもshift_jisは最近は使われずutf-8が好ましいようです。
ただWindowsコマンドプロンプトutf-8への切り替えは可能なものの、そのままではutf-8の文字が表示できず文字化けしてしまいます。
レジストリをいじればコマンドプロンプトutf-8を表示することもできるようなのですがレジストリをいじるのは怖いので
utf-8でソースを書く場合は必ずUnicodeに変換してコマンドプロンプトshift_jisモードのまま使用するようにすればうまくいくようです。