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を活用しています。内容は実際にファイルを作成して挙動を確認したものです。