ウェブ制作:「UTF-8」の「BOM」って何?付けた方がいいの?

この記事は約3分で読めます。

イメージ

こんにちは、さち です。

ウェブサイトの制作では、文字化け防止のため文字コードを「UTF-8」にするのが一般的。

よーし! 「UTF-8」でサイト作っちゃうぞー! ファイルを「UTF-8」で保存すればいいだけでしょ?

えっ、「BOM」? 何それ意味分かんないんだけど……。

スポンサーリンク

「BOM」ってなに?

テキストファイルによく使われる文字コード「UTF-8」には、「BOM」という仕組みがあります。

「BOM」とは、「バイトオーダーマーク(Byte Order Mark)」の略で、ファイルの文字コードが「UTF-8」であることを示します。(バイナリの先頭に付いてる「EF BB BF」が BOM)

簡単に言うと、「UTF-8 で文字を書いたよ」と PC に知らせるものです。

「BOM」を付ける/付けないは任意なので、テキストエディタ によっては保存時にその選択ができます。(画像は「Mery」の保存画面)
操作画面

一方、「メモ帳」は「BOM」の有無を選択できません。自動で「BOM」が付加されます。
操作画面

ちなみに、BOM無しのUTF-8を「UTF-8N」と呼ぶこともあります。(日本でしか使われない表現らしい)

「テキスト」で真っ先に思い浮かぶのは「メモ帳」で書くような一般的なテキストファイル(拡張子:txt)ですが、中身がテキストで構成されているファイルはウェブにもあります。

例えば、「HTML」「CSS」「JavaScript」「PHP」などです。これらのファイルも文字コードを「UTF-8」にすれば、当然「BOM」が関わってきます。

ウェブ制作では「BOM」を付けた方がいいの?

結論から言うと、「BOM」は付けない方がよいです。

「BOM」付けると動作や表示に不具合が出る可能性があるからです。(PHP で謎の空白ができてしまう など)

「BOM」無しだと、一部のブラウザやソフトでソースを見るときに誤った文字コードで表示されることがありますが、通常のウェブページ閲覧には何も問題ありません。

もちろん、HTMLCSS は文字コードを明記しましょう。

余談 - BOMの本来の役割

Unicode など、少し踏み込んだ内容なので、興味がない人は読み飛ばして下さい。

Unicode は「文字セット(符号化文字集合)」と呼ばれるもので、使用できる文字の定義です。

そして、この Unicode の各文字に番号を割り当てるのが、UTF-8 をはじめとする「文字コード(符号化方式)」です。UTF-8 以外にも UTF-16, UTF-32 が存在します。

UTF-16, UTF-32 は、コンピュータの構造によってエンディアン(バイトオーダー)の方式に違いがあり、「ビッグエンディアン」と「リトルエンディアン」の2種類が存在しています。

そして、この「エンディアン(バイトオーダー)」の判別に BOM(バイトオーダーマーク) を使用します。

しかし、UTF-8 にエンディアンの違いは存在しません。つまり、UTF-8 にとって BOM は必要ないものです。(BOM を付けることも「許容」しているだけ)

そのため、UTF-8 に BOM が付くことを想定しないものでは、BOM が不具合の原因になる場合があるわけです。

ただし、「Excel」「メモ帳」などの Microsoft のアプリでは、逆に「BOM」を付けないと不具合が出ることがあります。「メモ帳」が強制的に「BOM」を付ける理由はこれなのでしょう。

BOM の有無について、どちらかに統一して欲しいですね。

コメント

  1. c_toyama より:

    非常にためになりました
    ありがとうございます
    Visual Studio + Qt でデスクトップ アプリを開発していますが Qt 側はUTF-8なのにVisual StudioのコンパイラがBOMがないUTF-8だと 警告を出力し厄介です
    要はMSの仕様が世間様と異なるのでしょうね

タイトルとURLをコピーしました