BOM の付与・除去
ファイルまたはテキストを読み込むと、先頭に BOM(バイトオーダーマーク)があるかどうかを判定します。BOM を付けた版・外した版のどちらもその場でダウンロードできます。
BOM とは
BOM(Byte Order Mark)はファイル先頭に置かれる印で、UTF-8 では EF BB BF、UTF-16LE では FF FE、UTF-16BE では FE FF の並びです。本来は UTF-16 のバイト順を示すためのものですが、UTF-8 では「このファイルは UTF-8 です」という目印として使われます。
BOM を付けるべき場面
Excel で CSV をダブルクリックして開く場合は BOM 付き UTF-8 が必須級です。Windows のメモ帳や一部の業務システムも BOM を手がかりに文字コードを判別します。
BOM を外すべき場面
シェルスクリプトの shebang(#!/bin/bash)の前に BOM があると実行できません。PHP では BOM が出力に混ざって「headers already sent」になります。JSON パーサ、YAML、多くの CLI ツールも BOM を想定していないため、プログラムが読むファイルからは外すのが原則です。
よくある質問
BOM が付いているかどうやって分かりますか?
ファイルを読み込むと先頭バイトを 16 進数で表示し、BOM の有無と種類(UTF-8 / UTF-16LE / UTF-16BE)を判定して表示します。
BOM を消すとファイルの中身は変わりますか?
先頭の 2〜3 バイトが減るだけで、テキストの内容は一切変わりません。逆に付ける場合もその 3 バイトが増えるだけです。
「」という見えない文字が混ざります
それが BOM です。ファイルの途中に現れた場合は複数のファイルを結合したときの残骸であることが多く、本ツールで先頭の BOM を除去したうえで、途中の U+FEFF は文字コード変換ツール側で確認してください。
UTF-16 の BOM は外してもいいですか?
推奨しません。UTF-16 は BOM でバイト順(LE/BE)を判別するため、外すと受け取り側が推測に頼ることになります。