文字コードに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の世界が実感できると思います。

ウェブページ

Powered by Movable Type 5.2.7