バイトオーダーマーク(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を追加することがよくあります。
- PowerShell:
Out-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の削除
- ファイルの内容をホワイトスペースビジュアライザーに貼り付けます。
- 可視化の先頭で[BOM]を探します。
- CleanセクションでBOMを有効にし、Cleanをクリックします。
- 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を除去するとセッション問題が解決します。