CSVが文字化けする本当の理由と、開く前にできる確認

CSVが文字化けする本当の理由と、開く前にできる確認

記事
IT・テクノロジー
Excelでダブルクリックして開いたら、日本語が「�」や「譺�蟄子化縺�」になっている。
CSVを扱っていると一度は遭遇する症状です。

これはファイルが壊れているわけではありません。中身は無事なことがほとんどです。順に見ていきます。

■ 何が起きているのか

文字コードとは、文字を数字に置き換える対応表のことです。
日本語のCSVでよく使われるのは、主に次の2つです。

・UTF-8    … 今の標準。Webシステムからの出力はほぼこれ
・Shift_JIS  … Windows由来の古い標準。Excelが長く既定にしてきた

書いた側と読む側で、違う対応表を使うと文字化けします。
UTF-8で書かれたファイルをExcelがShift_JISだと思って開くと、日本語が壊れて見えます。

つまり文字化けは「ファイルの故障」ではなく「読み間違い」です。
正しい対応表で開き直せば、そのまま読めます。

■ 開かずに文字コードを確かめる

Macなら、ターミナルで次のコマンドを実行すると判定できます。

file -I ファイル名.csv

charset=utf-8 と出ればUTF-8、charset=shift_jis や iso-2022-jp なら別系統です。
Windowsなら、メモ帳で開いて「名前を付けて保存」を選ぶと、下部に現在の文字コードが表示されます。

先に確認しておくと、この後の作業が一発で決まります。

■ Excelで正しく開く

ダブルクリックで開くと、Excelは中身を見ずに既定の文字コードで解釈します。ここが事故の入口です。

正しい手順は、Excelを先に起動してから読み込むことです。

データタブ →「テキストまたはCSVから」→ ファイルを選ぶ

このとき元のファイル形式(文字コード)を選ぶ画面が出ます。
プレビューを見ながら、日本語が正しく表示される方を選んでください。

Googleスプレッドシートを使う手もあります。
「ファイル > インポート」でCSVを読み込むと、UTF-8はほぼ自動で判別されます。

■ 見えない文字「BOM」という落とし穴

もう1つ、厄介な症状があります。
見た目は文字化けしていないのに、1列目の見出しだけがうまく扱えないというものです。

・VLOOKUPで1列目だけ一致しない
・プログラムから読むと「その列は存在しません」と怒られる
・見出しをコピーして貼り付けると、なぜか空白が入る

原因は BOM(バイト・オーダー・マーク)という、ファイルの先頭に付く不可視の印です。
UTF-8で保存されたCSVの先頭に、目に見えない3バイトが入っていることがあります。

その結果、見出しが「店舗」ではなく「(見えない文字)店舗」として扱われ、
文字列の比較がすべて外れます。画面上は完全に同じに見えるので、非常に見つけにくい症状です。

見分け方は、1列目の見出しだけを対象に文字数を数えることです。

=LEN(A1)

「店舗」なのに 3 や 4 が返るなら、見えない文字が混ざっています。

■ 保存し直すときの注意

文字化けを直した後、Excelから「CSV UTF-8」で保存し直す方はよくいらっしゃいます。
これ自体は正しいのですが、Excelが保存するUTF-8にはBOMが付きます。

相手のシステムがBOMを想定していないと、今度は取り込み側で1列目がずれます。
「Excelでは直ったが、システムに取り込むとエラーになる」のはこのパターンです。

納品先がプログラムなのか人なのかで、正解が変わります。
渡す前に「BOMあり/なしの指定はありますか」と一言確認しておくと、往復が減ります。

■ それでも解決しないとき

・複数のCSVで文字コードがバラバラで、どれがどれだか分からない
・直したはずなのに、取り込み側でエラーが出続ける
・件数が多く、手作業で開いて確認していられない

このあたりまで来たら、1件ずつ手で開くより、まとめて判定・変換した方が早いです。

私はCSVやExcelのデータ整形を承っています。
整形済みのファイルに加えて、同じ処理を再実行できるスクリプトをお付けしていますので、
次に同じことが起きたときはご自身で対応していただけます。

――
この記事の執筆には生成AIを活用しています。内容は実際にファイルを作成して挙動を確認したものです。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す