CSVの文字化けの原因と確認方法
最終更新:
要点
CSVの文字化けのほとんどは、ファイルを保存したときの文字コードと、開く側が想定している文字コードが違うことで起きます。 まず文字コード(UTF-8か、Shift-JIS / CP932か、BOMがあるか)を確認し、取り込み先が求める文字コードで開き直す、または書き出し直すのが基本です。
ただし、文字化けしたまま上書き保存したファイルや、「?」「�」に置き換わってしまった文字は、そのファイルからは元に戻せません。元のシステムから書き出し直してください。
よくある原因
- UTF-8のCSVを、Shift-JIS(CP932)として開いた。日本語版のExcelでCSVをダブルクリックして開くと、BOMのないUTF-8はShift-JISとして読まれることがあり、日本語が化けます。
- Shift-JIS(CP932)のCSVを、UTF-8として読み込んだ。UTF-8を前提にしたWebサービスやプログラムでShift-JISのCSVを読むと、日本語の部分が「�」になります。
- 文字化けしたまま上書き保存した。化けた文字が新しい内容として保存され、元の文字の情報は失われます。
- Shift-JISで表せない文字が含まれている。絵文字や一部の拡張漢字はShift-JIS(CP932)にありません。UTF-8からShift-JISへ変換するときに「?」などに置き換わります。
文字化けの見え方の例
同じ文字でも、読み違え方によって見え方が変わります。どちらの方向の読み違えかの手がかりになります。
| 元の文字 | 読み違え | 表示の例 |
|---|---|---|
| お届け先名 | UTF-8をShift-JISとして読んだ | 縺雁ア翫¢蜈亥錐 |
| 東京都 | Shift-JISをUTF-8として読んだ | �����s |
「縺」「繝」のような漢字が並ぶのは、UTF-8をShift-JISとして読んだときによく見られる形です。「�」(置換文字)は、読み込めないバイトがあったことを示します。
文字コードとBOMの違い
次のCSVを、UTF-8とShift-JIS(CP932)で保存すると、同じ文字でもファイルの中身(バイト)が違います。
注文番号,お届け先名,住所
A-0001,架空 太郎,架空県サンプル市1-1| 文字 | UTF-8 | Shift-JIS(CP932) |
|---|---|---|
| お | E3 81 8A | 82 A8 |
| 東 | E6 9D B1 | 93 8C |
BOM(バイトオーダーマーク)は、UTF-8ファイルの先頭に付く3バイト(EF BB BF)の目印です。 ExcelはBOM付きのUTF-8なら日本語を正しく開けます。一方、BOMを想定していないシステムでは、1列目の項目名の前に見えない文字が付いたように扱われ、項目名が一致しないことがあります。 BOMが必要かどうかは、取り込み先の仕様で決まります。
確認の手順
- テキストエディタで文字コードを見る。メモ帳やVS Codeなどで開き、画面下部の文字コード表示(「UTF-8」「UTF-8(BOM付き)」「Shift-JIS」など。表記はソフトによって異なります)を確認します。
- Excelでは「データ」から読み込む。ダブルクリックで開かず、「データ」タブの「テキストまたはCSVから」で読み込み、「元のファイル」を「65001: Unicode (UTF-8)」や「932: 日本語 (シフト JIS)」に切り替えて、正しく表示される方を選びます。
- 取り込み先の条件を確認する。受け付ける文字コード(UTF-8かShift-JISか)とBOMの有無を、取り込み先の仕様書やヘルプで確認し、その形式で書き出します。
文字化けした文字列やファイルを元に戻すには
文字化けがすでに起きている場合でも、取り違えた文字コードの組み合わせがわかり、元のバイトが残っていれば、逆向きに変換して元の文字に戻せることがあります。 例えば「縺雁ア翫¢蜈亥錐」は、UTF-8で書かれた「お届け先名」をShift-JISとして読んだものなので、Shift-JISのバイトに戻してからUTF-8として読み直すと元に戻ります。
- 戻せないもの。「�」や「?」に置き換わった文字は、置き換えた時点で元のデータが失われています。推測で埋めるのではなく、元のファイルを探して読み直してください。
- 候補の確認。逆向きの変換が成り立つことは確かめられますが、それが元の文章そのものかどうかは、内容を見て判断する必要があります。
Mojibake Fixer は、文字化けした文字列やCSV・TSV・TXTファイルについて取り違えの組み合わせを調べ、逆変換がバイト単位で一致した候補だけを根拠つきで表示します。Shift-JISなどのファイルをUTF-8に変換して保存することもできます。
Kakerio(CSV Doctor)でできること・できないこと
できること
- BOM付きUTF-8、UTF-8、UTF-16(BOMあり・なし)を判定し、UTF-8として正しく読めないファイルはShift-JIS(CP932)として読み込みます。判定した文字コードは「ファイル情報」に表示します。
- 読み込めないバイトがあり置換文字「�」が出た場合は「文字化けの可能性」として報告し、修正版の出力を止めます。行や項目の区切りを正しく判断できないためです。
- 絵文字や一部の拡張漢字など、Shift-JIS(CP932)で扱えない可能性のある文字を知らせます。
- 修正版は、常にUTF-8(BOM付き)・改行コードCRLFで書き出します。
できないこと
- 失われた文字の復元。「?」や「�」に置き換わって保存された文字や、化けたまま上書きされた文字は元に戻せません。
- 化けた結果が普通の文字として保存されたものの判定。「縺雁ア翫¢蜈亥錐」のように、化けた文字列が正しい文字として保存されていると、通常のデータと区別できません。
- Shift-JISでの書き出し。修正版はUTF-8(BOM付き)だけです。Shift-JISが必要な取り込み先では、取り込み先の手順に合わせて変換してください。
- 取り込みの成功の保証。文字コードが合っていても、項目の並びや桁数などは取り込み先の仕様で確認が必要です。