文字コードにUTF-8を使う場合、BOMを付けてはいけない理由(073)
WEB制作においてUTF-8というと、なんだか最先端的で非常にイケてる文字コード(エンコード)というイメージがありますが(勝手な思い込みですか?)、調べてみるとなかなかやっかいでトラブルメーカーな文字コードだったりします。WEB制作の場合にBOMが不要な理由と、周辺知識をまとめました。
UTF-8には、そもそもBOMは不要な符号
BOM(Byte Order Mark)は、UTF-16、UTF-32を使用している場合に必要となる符号(マーク)です。これは必ずテキストファイルの先頭に配置されていて、テキストエディタ等で何かの表示が見えたりはしません。UTFには種類(エンディアンと呼ばれる)によってBOMが割り当てられています。UTF-16、UTF-32にはそれぞれ2種類あるので、BOMが種類を判別するためのマークとして使われ、文字化けなどの不具合が起こらないようにしましょう、というのが存在理由です。
UTF-8はBOMで判別しなくてはならない種類というのがないため(つまりUTF-8は1種類のみ)、BOMをつける必要がありませんが(ただしUTF-8のBOMは取り決められています。不要なのに!)、メモ帳などの代表的なテキストエディタでは、UTF-8を選択した場合に自動的にBOMを付けてしまったり、一部のソフトウェアではBOMがないことでエラーを生じるため、ユーザーに迷いを生じさせてしまっているようです。
基本的には、UTF-8にはBOMは不要で、不具合がある場合にBOMを付けて試すと実行できたりする、と覚えておけばよいでしょう。BOMが付いていないUTF-8のことを「UTF-8N」と区別していますが、日本国内でのみ通用する表現で、正式な文字コード名称ではありません。
WEBの場合のUTF-8とBOM
WEBの場合、ブラウザがBOMでも文字コードの判別を行うようですが、通常、metaタグで文字コードを明示しますので、特に役に立たないためか、UTF-8でBOMは不要と勧めているようです(Another HTML-lintでもチェックされます)。
単に不要なだけではなく、以前のバージョンのFirefoxではクロスサイトスクリプティングの恐れがあるようです(後述、参考元サイト参照のこと)。ですので、WEBの場合もUTF-8にBOMを付けるのは、やめておきましょう。
参考元サイト
より詳しく知りたい方は参考元サイトをご覧ください。想像以上に深いUTF-8の世界が実感できると思います。
- UTF-8 - Wikipedia
- 文字コード - Wikipedia
- XML用語事典 [BOM (Byte Order Mark)]
- MFSA 2006-42: UTF-8 ページで BOM を使ったクロスサイトスクリプティング
- UTFとは何か