CSVの文字化けはなぜ起きる?
CSVファイルを開いたら「繧ウ繝ウ繝励Μ繝シ繝医」のような意味不明な文字列になった経験はありませんか?
これは文字エンコーディングの不一致が原因です。ファイルを保存した時のエンコーディングと、開く時に想定されるエンコーディングが異なると文字化けが発生します。
エンコーディングとは?
コンピュータは文字を「数値」として保存しています。同じ数値でも、エンコーディング方式によって対応する文字が変わります。
- Shift_JIS: Windowsの日本語環境でデフォルト。Excelが生成するCSVはこれ
- UTF-8: macOS、Linux、Webの標準。Googleスプレッドシートはこれで出力
- EUC-JP: 古い業務システムで使われることがある
- UTF-16: Excelが「Unicode テキスト」として保存する時の形式
よくある文字化けパターンと原因
パターン1: ExcelでUTF-8のCSVを開くと文字化け
症状: GoogleスプレッドシートやシステムからダウンロードしたCSVをExcelで開くと文字化けする
原因: ExcelはBOM(Byte Order Mark)なしのUTF-8ファイルをShift_JISとして開いてしまう
解決方法:
- CSV文字化け修復ツールでUTF-8(BOM付き)に変換してからExcelで開く
- Excelの「データ」→「テキスト/CSVから」で開き、エンコーディングを「UTF-8」に指定する
パターン2: MacとWindows間でCSVを共有すると文字化け
症状: Macで作成したCSVをWindowsのExcelで開くと文字化け(またはその逆)
原因: macOSはUTF-8がデフォルト、WindowsのExcelはShift_JISがデフォルト
解決方法:
- CSV文字化け修復ツールで変換する
- 保存時にUTF-8 BOM付きで保存する(Excelの「名前を付けて保存」→「CSV UTF-8」を選択)
パターン3: 業務システムからエクスポートしたCSVが文字化け
症状: 基幹システムや会計ソフトからエクスポートしたCSVが読めない
原因: 古いシステムはEUC-JPやISO-2022-JPでデータを出力する場合がある
解決方法:
- CSV文字化け修復ツールにドラッグ&ドロップするだけで自動検出・変換される
BOM(Byte Order Mark)とは?
BOMはファイルの先頭に付与される特殊なバイト列で、そのファイルがUTF-8であることをソフトウェアに知らせます。
- BOMあり:
EF BB BFがファイル先頭に付く → Excelが正しくUTF-8として認識 - BOMなし: ファイル先頭にマークがない → Excelが日本語環境ではShift_JISと誤認識
重要: GoogleスプレッドシートからダウンロードしたCSVはBOMなしのUTF-8です。そのままExcelで開くと文字化けします。CSV文字化け修復ツールはBOM付きUTF-8で出力するため、変換後はExcelでも問題なく開けます。
プログラマー向け: コマンドラインでの文字化け対策
ファイルのエンコーディングを確認
file -I data.csv
# 出力例: data.csv: text/csv; charset=shift_jis
nkfで変換(Linux/Mac)
nkf -w --overwrite data.csv # UTF-8に変換
nkf -w --bom data.csv > data_bom.csv # BOM付きUTF-8
Pythonで変換
with open('data.csv', 'rb') as f:
raw = f.read()
text = raw.decode('shift_jis') # or 'euc-jp'
with open('data_utf8.csv', 'w', encoding='utf-8-sig') as f:
f.write(text)
まとめ
| 状況 | 原因 | 解決方法 |
|---|---|---|
| ExcelでCSVが文字化け | BOMなしUTF-8をShift_JISとして開いている | BOM付きUTF-8に変換 |
| Mac↔Windows間で文字化け | デフォルトエンコーディングの違い | UTF-8 BOM付きで統一 |
| 古いシステムのCSV | EUC-JP/ISO-2022-JPで出力 | UTF-8に変換 |
いずれの場合も、CSV文字化け修復ツールにファイルをドラッグ&ドロップするだけで、エンコーディングを自動検出してUTF-8(BOM付き)に変換できます。サーバーにファイルを送信しないので、機密データを含むCSVでも安心です。