ダウンロードしたCSVをダブルクリックしたら、氏名の列が「�����」や見たことのない漢字の羅列になっていた。誰もが一度は通る道です。
この現象は壊れているわけではありません。書いた側と読む側で、文字の表し方(文字コード)の想定がずれているだけです。ファイル自体は無傷なので、正しい読み方さえ指定できれば元に戻ります。
なぜCSVだけ、こんなに化けるのか
CSVは「文字が区切り記号で並んでいるだけ」のとても素朴な形式で、自分が何の文字コードで書かれているかの情報を持っていません。そのため開く側が推測します。
- **Excel(Windows版)**は、日本語環境では既定でShift_JISとして読もうとします
- Webサービスやプログラムが吐き出すCSVは、ほとんどがUTF-8です
この2つが噛み合わないと化けます。逆に、Shift_JISで書き出したCSVをMacやWeb系のツールに渡しても化けます。どちらかが間違っているのではなく、渡す相手に合わせて変換するしかない種類の問題です。
Excel側の「データ」→「テキストまたはCSVから」で文字コードを指定して読み込む方法もありますが、毎回その手順を踏むのは面倒ですし、ファイルを人に渡す場合は相手の環境で同じことをしてもらう必要があります。
ファイルを入れると、文字コードを判定して変換する
CSVの文字化け直しは、ファイルを入れると文字コードを自動判定し、中身を表で確認してから別の文字コードに変換し直せるツールです。
判定は「候補ごとに実際に読んでみて、日本語として自然かどうかを採点する」方式です。ひらがな・カタカナ・漢字が素直に並ぶ読み方を選び、制御文字や読めない文字(�)が出る読み方を落とします。判定を誤った場合(英数字だけのファイルなど、決め手が無いことがあります)は、プレビューを見ながら読み込みの文字コードを手で選び直せます。
変換先として選べるのは次の5つです。
| 変換先 | どんなときに |
|---|---|
| UTF-8 (BOM付き) | Excelでダブルクリックして開きたいとき。迷ったらこれ |
| UTF-8 (BOMなし) | プログラム・Googleスプレッドシート・Web向け |
| Shift_JIS (CP932) | 古い業務システムに取り込ませるとき |
| EUC-JP | 古いUNIX系システム向け |
| UTF-16 LE | Excelの「Unicodeテキスト」と同じ形式 |
改行コード(Windows の CRLF / Mac・Linux の LF)も同時に揃えられます。複数のファイルをまとめて放り込んで、一括で変換することもできます。
「UTF-8 (BOM付き)」がだいたいの正解
BOM(Byte Order Mark)は、ファイルの先頭に付く3バイトの目印で、「これはUTF-8です」と宣言する役割をします。これが付いていると、Excelはダブルクリックでも正しく開きます。中身は普通のUTF-8なので、Googleスプレッドシートや他のツールでもそのまま読めます。
ExcelでもWebでも使いたいなら、UTF-8(BOM付き)にしておくのがいちばん事故が少ない選択です。逆に、プログラムで読み込む相手がBOMを想定していない場合(先頭の列名に見えない文字が混ざる、と言われる場合)だけ、BOMなしを選んでください。
Shift_JISに変換すると消える文字がある
Shift_JISやEUC-JPは、UTF-8より表せる文字の数がずっと少ない文字コードです。絵文字、一部の環境依存文字、旧字体の一部は存在しないので「?」に置き換わります。
このツールは、保存する前に「この文字コードで表せない文字」を一覧で表示します。何が失われるか分かったうえで判断できるので、「取り込めたけれど一部の氏名が化けていた」という後からの事故を防げます。文字を落としたくない場合は、相手先にUTF-8で受け取れないか確認するのが本筋です。
ファイルはどこにも送られません
文字コードの変換サービスはWeb上に多数ありますが、その多くはファイルをサーバーへアップロードします。CSVには顧客名簿・受注データ・給与データといった、社外に出せないものが入りがちです。
このツールはブラウザの中だけで処理します。ファイルを選んでも通信は発生せず、アップロードも保存もされません(ページを閉じれば何も残りません)。社内のデータでも、持ち出しの心配なく使えます。
制限
- 対象はテキスト形式のファイル(.csv / .tsv / .txt / .log / .json など)です。Excelのブック(.xlsx)は文字コードという概念のない別形式なので対象外です
- ISO-2022-JP(古い日本語メールで使われた形式)は読み込みのみ対応しています
- とても大きなファイルでは、判定は先頭64KB・プレビューは先頭部分だけを使います(変換自体はファイル全体に対して行われます)