2行目に書くあの枕詞
とりあえず1行目にshebang書いて続けざまに2行目に書くアレ
#!/usr/bin/python
# -*- Coding: utf-8 -*-
Pythonのソースコードがどうエンコードされるべきか定義するおまじないめいた文である。
ちなみにこの例だとうまくいかない。Cが大文字だからだ。ハマった。
なんなんだ。一体coding: ナントカってなんなんだ。
ちょっと調べてみよう。
PEP 263を読みましょう
調べようと言ってみたが全てはPEP 263に書かれている。さすがPython。
というわけでかいつまんでみる。
そもそもなんで必要なのか
ざっくり書くと、
Python 2.1までユニコード文字を表記するにはエスケープシーケンスを使うしかなかった。8-bit文字なら好きなエンコーディングでいいけど限界あるよね。
…ということらしい。実際不便だ。Pythonでの文字コードの話はこの辺が参考になるかもしれない。UTF-8便利。
仕組み
デフォルトはASCII
エンコーディングについて何も指定がない場合はASCIIとして解釈される。
追記:Python3ではデフォルトでUTF-8(PEP 3120)
1行目か2行目に書く
2行目でもいいのはshebangがあるためだろうか?
フォーマット
単純にこれでもいい。
# coding=<encoding name>
よく使われるのは:
#!/opt/local/bin/python
# -*- coding: <encoding name> -*-
この表記はEmacs由来のようだ。vimだと:
#!/emacs/or/vim/python
# vim: set fileencoding=<encoding name> :
どう書けば認識されるんよ?
実は1行目か2行目が次のパターンにマッチすると括弧内を文字コードとして認識する。1
"coding[:=]\s*([-\w.]+)"
なのでこれにマッチする書き方さえすればエディタとの整合が取れるようになっている。
他にも次のような表記が可能。
#!/mongoose/vs/python
# This Python file uses the following encoding: utf-8
#!/neko/nadetai/python
# Current encoding: shift-jis is not good for this environment.
-
\s : [ \t\n\r\f], \w : [_a-zA-Z0-9] ↩