ダウンロードしたCSVをExcelで開いたら、日本語が「縺ゅ>縺・∴縺翫€」のような謎の文字列になっていた——CSVを扱う人なら一度は通る道だと思います。
結論から言うと、これはファイルが壊れているわけではありません。文字コードの解釈がずれているだけで、データ自体は無事です。原因さえ分かれば数分で直せるので、まず仕組みから説明します。急いでいる人は「直す方法」のセクションまで飛んでください。
なぜ文字化けが起きるのか
コンピュータは文字をそのまま保存できないので、文字を数値に変換するルール(文字コード)を使ってファイルに書き込みます。日本語で主に使われるルールは2つあります。
- Shift-JIS(CP932) — 昔からWindowsで使われてきた日本独自の方式
- UTF-8 — 現在の世界標準。Webサービスが出力するCSVはほぼこれ
たとえば「あ」という文字は、Shift-JISでは 82 A0、UTF-8では E3 81 82 という、まったく異なるバイト列で保存されます。
ここで問題になるのが、CSVファイルには「自分がどの文字コードで書かれているか」を示す情報がないことです。開く側のソフトが中身を見て推測するしかありません。
そして日本語版のExcelは、CSVをダブルクリックで開くときShift-JISだと決め打ちで解釈します。UTF-8で保存されたファイルをShift-JISのルールで読むので、バイト列の解釈がずれて「縺ゅ>縺」のような出鱈目な文字列が表示されるわけです。
つまり典型的な文字化けの構図はこうです。
Webサービス側: UTF-8 でCSVを出力
↓
Excel: 「CSVだからShift-JISだろう」と解釈
↓
結果: 文字化け
直す方法1:Excelのインポート機能で文字コードを指定する
追加ソフト不要で一番確実な方法です。ダブルクリックで開くのをやめて、Excelのインポート機能から読み込みます。
- Excelを起動して空のブックを開く
- 「データ」タブ →「データの取得」→「テキストまたはCSVから」を選ぶ
- 対象のCSVファイルを選択
- プレビュー画面の「元のファイル」で 65001: Unicode (UTF-8) を選ぶ
- 文字化けが直ったことを確認して「読み込み」
手順は少し増えますが、文字コードを明示して読むので確実です。逆に、取引先から届いたCSVが化ける場合は、ここで 932: 日本語 (シフト JIS) を選ぶと直ることもあります。
直す方法2:メモ帳で「BOM付きUTF-8」として保存し直す
もっと手軽な方法です。Windows標準のメモ帳で開いて、保存し直すだけです。
- CSVファイルを右クリック →「プログラムから開く」→「メモ帳」
- メモ帳上では文字化けせずに表示されるはず(メモ帳はUTF-8を正しく認識できるため)
- 「ファイル」→「名前を付けて保存」
- 文字コードを「UTF-8 (BOM付き)」にして保存
- 保存したファイルをExcelでダブルクリックで開く
これで文字化けせずに開けます。なぜBOMを付けると直るのかは、後述の「BOMとは何か」で説明します。
直す方法3:最初からExcelファイル(.xlsx)に変換する
CSVを毎回インポートするのが面倒なら、CSVをExcelファイルに変換してしまうのが手っ取り早いです。.xlsx形式はファイル内部に文字コード情報を持っているので、文字化けという概念自体がなくなります。
当サイトの変換ツールはブラウザ内で変換が完結する(ファイルがサーバーに送信されない)ので、業務データでも安心して使えます。文字コードは自動判定されるため、Shift-JISでもUTF-8でもそのまま放り込めば大丈夫です。
BOMとは何か
方法2で出てきた「BOM付きUTF-8」について補足します。
BOM(Byte Order Mark)は、ファイルの先頭に付ける EF BB BF という3バイトの目印です。これが付いていると、ファイルを開くソフトは「このファイルはUTF-8だ」と確実に判定できます。
日本語版Excelは、BOMがないUTF-8のCSVをShift-JISと誤認しますが、BOMがあればUTF-8として正しく開いてくれます。方法2が効くのはこのためです。
ちなみに、システム開発の現場では逆にBOMが嫌われることもあります。プログラムによってはBOMをデータの一部として読み込んでしまい、1列目のヘッダー名が 名前 のようになってバグの原因になるからです。「Excelで開くならBOM付き、システムに食わせるならBOMなし」と覚えておくと使い分けに迷いません。
まとめ
- 文字化けの原因は、UTF-8のCSVをExcelがShift-JISとして開いてしまうこと。データは壊れていない
- 確実なのは「データ」タブからのインポートで文字コードを指定する方法
- 手軽なのはメモ帳でBOM付きUTF-8に保存し直す方法
- 根本的に避けたいなら、CSVを.xlsxに変換してから扱う
文字化けは「壊れた」のではなく「読み方を間違えただけ」。そう分かっていれば、もう慌てることはないはずです。