バイトオーダーマーク(BOM)とエンコーディングマーカー

バイトオーダーマーク(U+FEFF)の役割、UTF-8/UTF-16/UTF-32検出における機能、3バイトUTF-8表現、ファイル内での識別と処理方法を理解します。

Encoding Issues

詳細な説明

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

バイトオーダーマーク(BOM)は、テキストファイルの先頭に配置されるUnicode文字U+FEFFで、エンコーディングとバイトオーダーを示します。エンコーディングの検出に有用ですが、データ処理で頻繁に問題を引き起こします。

各エンコーディングでのBOM

エンコーディング BOMバイト バイトオーダー
UTF-8 EF BB BF N/A(UTF-8にはバイトオーダーの問題なし)
UTF-16 BE FE FF ビッグエンディアン
UTF-16 LE FF FE リトルエンディアン
UTF-32 BE 00 00 FE FF ビッグエンディアン
UTF-32 LE FF FE 00 00 リトルエンディアン

UTF-8 BOM

UTF-8 BOM(EF BB BF)はUTF-8にバイトオーダーの曖昧さがないため技術的には不要です。しかし、一部のアプリケーション(特にWindowsのメモ帳やExcel)はUTF-8ファイルにBOMを追加します。ファイルの先頭にあるこの3バイトシーケンスは問題を引き起こす可能性があります:

  1. シェルスクリプト#!/bin/bashの前のBOMがシバンを壊す
  2. JSON/YAML解析:一部のパーサーはBOMで始まるファイルを拒否する
  3. CSVインポート:BOMが最初のフィールドにゴミ文字として表示される場合がある
  4. HTTPレスポンス:HTML前のBOMがクワークスモードを発動する可能性がある

Unicode Inspectorでの検出

疑わしいテキストをUnicode Inspectorに貼り付けます。BOMが存在する場合、最初の文字としてU+FEFFが「BYTE ORDER MARK」の名前と「Other」カテゴリで表示されます。

BOMの除去

ほとんどのプログラミング言語でBOMの除去は簡単です:

  • JavaScript: text.replace(/^\uFEFF/, '')
  • Python: encoding='utf-8-sig'で開く
  • コマンドライン: sed '1s/^\xEF\xBB\xBF//' file.txt

ユースケース

不可視のBOM文字によるファイル解析エラーのデバッグ、正しく見えるにもかかわらずCSVやJSONファイルの解析に失敗する原因の調査、外部システムから受信したファイルのエンコーディングの確認に使用します。

試してみる — Unicode Inspector

フルツールを開く