BOM(Byte Order Mark)がある場合とない場合の影響
UTF-8 における BOM (\ufeff
) の有無は、ファイルの読み取りや表示に影響を与える場合があります。
1. BOM あり (\ufeff
付き)
var blob = new Blob(['\ufeff' + printData], { type: "text/csv;charset=utf-8" });
影響
✅ メリット
- Windows版 Excel で開いたときに 文字化けしにくい(特に CSV ファイル)。
- 一部のテキストエディタやアプリケーションが UTF-8 であることを正しく認識 できる。
❌ デメリット
- UNIX/Linux の一部のツール (
cat
,grep
,awk
など) では BOM をデータの一部と誤認識 することがある。 - Python や JavaScript の
read()
関数で最初の文字として\ufeff
が入る場合がある。 - Web サーバーや API で処理する際、BOM の存在が影響を与える場合がある。
2. BOM なし (\ufeff
なし)
var blob = new Blob([printData], { type: "text/csv;charset=utf-8" });
影響
✅ メリット
- Linux 環境の
grep
やawk
などで スクリプトが正しく動作する。 - 一部のプログラム(特に JSON, XML, CSV の解析)で 余計な BOM の影響を受けない。
- Web サーバーでの処理に影響を与えない。
❌ デメリット
-
Windows版 Excel で CSV を開いたときに文字化けする可能性がある(特に日本語)。
- Excel では UTF-8 を正しく判別できないことがあり、Shift_JIS で解釈されることがある。
BOM の有無の選び方
使用用途 | BOM あり | BOM なし |
---|---|---|
Windows Excel で開く CSV | ✅ 推奨 | ❌ 文字化けする可能性あり |
Linux でのテキスト処理 (cat , grep , awk など) |
❌ 影響を受ける可能性あり | ✅ 推奨 |
Web サーバーで API 連携や JSON/XML を扱う | ❌ 影響を受ける可能性あり | ✅ 推奨 |
UTF-8 のエディタで開く(VSCode, Sublime, Notepad++ など) | どちらでもOK | どちらでもOK |
結論
- Windows の Excel で CSV を開く場合 → BOM あり
- Linux や Web サーバーで処理する場合 → BOM なし