バイトオーダーマーク(BOM)の検出と削除

テキストファイルの先頭にある不可視のBOM文字(U+FEFF)を検出します。シェルスクリプト、JSON、PHP、HTTPレスポンスの問題を防ぐために除去します。

Unicode Whitespace

詳細な説明

バイトオーダーマーク(BOM)

バイトオーダーマーク(BOM、U+FEFF)は、UTF-16およびUTF-32エンコーディングのテキストストリームのバイトオーダー(エンディアン)を示すために元々設計されたUnicode文字です。UTF-8では固定のバイトオーダーのためBOMは不要ですが、多くのWindowsツールがまだ追加します。

BOMの発生源

  • メモ帳(Windows):Windows 10バージョン1903以前、メモ帳はデフォルトでBOM付きのUTF-8ファイルを保存していました。
  • ExcelのCSVエクスポート:ExcelはUTF-8 CSVにエクスポートする際にBOMを追加することがよくあります。
  • PowerShellOut-FileコマンドレットはデフォルトでBOM付きUTF-8を書き込みます。
  • Visual Studio:一部のVS設定が新しいファイルにBOMを追加します。
  • テキストエディタ:一部のエディタが「UTF-8として保存」時にBOMを追加します。

ビジュアライザーの表示方法

BOMはオレンジ色の**[BOM]**マーカーとして表示され、通常テキストの先頭に位置します。統計パネルがカウントを表示します(通常0または1ですが、結合されたファイルには複数ある場合があります)。

BOMが引き起こす問題

コンテキスト 問題
シェルスクリプト #!/bin/bash\uFEFF#!/bin/bashになり、「command not found」を引き起こす
JSON JSON仕様はBOMを禁止;パーサーがファイルを拒否するか最初のキーにBOMが含まれる
PHP <?phpの前のBOMがヘッダー前に出力を送信し、セッションとリダイレクトを壊す
HTTP レスポンスボディのBOMがJSON APIとXMLパースを壊す可能性
CSV 最初の列ヘッダーに不可視のBOMが含まれ、ルックアップ失敗を引き起こす
YAML BOMがYAMLパーサーを混乱させるか文字列値に含まれる
結合 BOM付きファイルの結合で結果の途中にBOMが発生

BOMの削除

  1. ファイルの内容をホワイトスペースビジュアライザーに貼り付けます。
  2. 可視化の先頭で[BOM]を探します。
  3. CleanセクションでBOMを有効にし、Cleanをクリックします。
  4. BOMが除去され、残りのテキストは変更されません。

予防

エディタをBOMなしのUTF-8で保存するよう設定:

  • VS Code: "files.encoding": "utf8"(デフォルト、BOMなし)
  • Notepad++: エンコーディング > UTF-8(「UTF-8 BOM」ではなく)
  • Vim: :set nobomb

ユースケース

PHP開発者のセッション管理が、同僚がWindowsで設定ファイルを編集した後に突然壊れます。session_start()の前にヘッダーが既に送信されています。ホワイトスペースビジュアライザーがPHPファイルの先頭にメモ帳によって追加されたBOMを検出します。BOMを除去するとセッション問題が解決します。

試してみる — Whitespace Visualizer

フルツールを開く