バイトオーダーマーク(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バイトシーケンスは問題を引き起こす可能性があります:
- シェルスクリプト:
#!/bin/bashの前のBOMがシバンを壊す - JSON/YAML解析:一部のパーサーはBOMで始まるファイルを拒否する
- CSVインポート:BOMが最初のフィールドにゴミ文字として表示される場合がある
- 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ファイルの解析に失敗する原因の調査、外部システムから受信したファイルのエンコーディングの確認に使用します。