目次
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)を念頭に作業しよう。