BOM に注意しよう

投稿者: | 2019年10月2日

BOM とは

BOM(ボム)とは、Unicode で表現されたテキストデータを識別するためのものです。
正式名称を「byte order mark」というので、略して BOM と呼ばれます。

BOM はあくまで記号(識別子)のため、パッと見では分かりません。
※テキストエディタで開いても、テキスト部分は BOM 有無で差異がありません。

BOM は、対象のテキストデータが Unicode で符号化されていることを明示的に表す目的で付与されます。

base on バイト順記号 – Wikipedia

バイト順記号 (英: byte order mark; BOM) とは,Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

BOM は付けない

普段使いでは BOM 無し UTF-8(UTF-8N)で問題ありません。
というか、むしろ付けては百害あって一利なし!
(今回、当記事を書くに至った原因が BOM なので)。

テキストファイルをやり取りする分には BOM 有無で影響が出ることはほぼ無いでしょう。
大抵のテキストエディタで両方に対応していますし、何より肝心の文字部分は全く同じなのですから。

BOM 有りで問題のケース

プログラムソースを BOM 有りで作ると、その結果を受け取る次のプログラムで支障が出ることがあります。
先頭に BOM が付与されているので、正しい値を取得できないんですね。

ネットを見てみると、JavaScript で同様の症状に悩まされた方がおりました(UTF-8のBOMにはまった話 – Qiita)。

ちなみに私の場合は BOM 付きファイルで生成した結果を wkhtmltopdf に流し込んだら、ハマりました。
エラーにならないのがミソです。
ただ、成果物(pdf or image)が壊れて作成されました…。

結論

UTF-8 で作業する際は、BOM 無し(UTF-8N)を念頭に作業しよう。