gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

爆弾注意!!

BOMBだとリアルに爆弾ですが、BOMもまたなにげに爆弾です。


UTF-8という文字コードがあります。最近、散々市民権を得まくって、割合にデフォルトな文字コードといった風情になっております*1
まぁ多言語対応とか考えた時に大変によろしい感じではあるのですが。
が。
が。


プログラムファイルそのものをUTF-8で記述&保存する時に。
一つ、注意すべき点があります。


UTF-8…というかUnicodeは。己がUnicodeで有る事を主張するために(っつか、guessとかいう面倒でトラブル起こしやすいロジックから解放されるために)。
ファイルの先頭に、ある固定のバイナリを置く事にしました。UTF-8の場合、EFBBBFHとか0xfebbffとか表記される16進数3バイトの値です。
これをByte Order Mark、略して BOM と呼称します。
これで、煩わしいguessルーチンから少しだけ解放されて、ハッピー目出度し万々歳、というやつです。


テキストファイル、ならね。


PHPプログラムがBOM付きの場合。まるでそれはBOMBのように働きます。ちゅどむ、ってやつですな。
一見するだけだとわかりにくい部分なだけに。奇妙なエラーとともに出るこの子は、結構な厄介者です*2
ですので。
プログラムとして保存する場合。絶対に何があろうとも、BOMを付けないようにしなくてはいけません。
場所によっては「UTF-8n」なんて表記をする事もあるみたいですねぇよぉ知りませんが。


BOMって話をした時に。案外に通じない事があったので、ちょろりとメモり。
…一応、BUG、としてPHP側も認識しているらしいんですけどねぇ…ステータスどうなってるんだろ?

*1:おいちゃんは未だにeucベースですが

*2:徹夜が続いてたってのもあるんだけど…気付くのに小一時間かかったですよついこないだ…