UTF-8とは:BOM付きとBOMなし(UTF-8N)の違い――Unicode関連の文字エンコード

2013 年 8 月 23 日 Categories: IT, プログラミング |

UTF-8の基本

Unicodeに基づきながらも、旧来のASCIIコードとも互換性のある文字エンコード方式。

多言語対応でありながら扱いやすく、対応しているエディタも多いため、ウェブ関連やスクリプト言語を中心によく使われ、テキストファイルにおける文字エンコードのデファクトスタンダードになりつつある。

なお、「UTF-8」とハイフンを付けるのが正しい表記。

BOMとは

Byte Order Markの略で、通常「ボム」と読む。

Unicodeのファイルでバイト順を示すために先頭につける数バイトのデータのこと。

本来、なくても構わないもので、Unicodeの規格では、「UTF-8においてBOMは容認されるが、必須でも勧められるものでもない」(Wikipedia)。

呼称

BOM付きとBOMなしのUTF-8をそれぞれ区別するためにさまざまな呼称が存在しており、ややこしい。

UTF-8 BOMなし UTF-8 BOM付き
UTF-8 UTF-8N
UTF-8 シグネチャなし UTF-8 シグネチャ付き
  • UTF-8Nという言葉は日本でのみ使われる
  • シグネチャという言葉はMicrosoftのアプリでよく使われる(Visual Studioなど)

問題点

BOMを想定しているアプリ

BOMがないとUTF-8だと認識できず、種々の問題が起こる。

例:Microsoft Office Excel

BOMを想定していないアプリ

BOMがあるとそれを余計なデータだとみなし、種々の問題が起こる。

例:PHP

BOMを文字列とみなして出力してしまう。よって、無駄な出力があるだけでなく、header()などの関数が使えなくなってしまう弊害も起こる。

まとめ

通常は「UTF-8 BOMなし」を使う。

Unicodeの規格でもBOMは推奨していないため。そうしたものがないと読み込めないというのは、アプリ側に問題があると考えたほうがいいだろう。

あとは、その都度対応するしかないように思う。