CSVガイド

CSVの文字化けの原因と確認方法

最終更新:

要点

CSVの文字化けのほとんどは、ファイルを保存したときの文字コードと、開く側が想定している文字コードが違うことで起きます。 まず文字コード(UTF-8か、Shift-JIS / CP932か、BOMがあるか)を確認し、取り込み先が求める文字コードで開き直す、または書き出し直すのが基本です。

ただし、文字化けしたまま上書き保存したファイルや、「?」「�」に置き換わってしまった文字は、そのファイルからは元に戻せません。元のシステムから書き出し直してください。

よくある原因

  1. UTF-8のCSVを、Shift-JIS(CP932)として開いた。日本語版のExcelでCSVをダブルクリックして開くと、BOMのないUTF-8はShift-JISとして読まれることがあり、日本語が化けます。
  2. Shift-JIS(CP932)のCSVを、UTF-8として読み込んだ。UTF-8を前提にしたWebサービスやプログラムでShift-JISのCSVを読むと、日本語の部分が「�」になります。
  3. 文字化けしたまま上書き保存した。化けた文字が新しい内容として保存され、元の文字の情報は失われます。
  4. 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-8Shift-JIS(CP932)
おE3 81 8A82 A8
東E6 9D B193 8C

BOM(バイトオーダーマーク)は、UTF-8ファイルの先頭に付く3バイト(EF BB BF)の目印です。 ExcelはBOM付きのUTF-8なら日本語を正しく開けます。一方、BOMを想定していないシステムでは、1列目の項目名の前に見えない文字が付いたように扱われ、項目名が一致しないことがあります。 BOMが必要かどうかは、取り込み先の仕様で決まります。

確認の手順

  1. テキストエディタで文字コードを見る。メモ帳やVS Codeなどで開き、画面下部の文字コード表示(「UTF-8」「UTF-8(BOM付き)」「Shift-JIS」など。表記はソフトによって異なります)を確認します。
  2. Excelでは「データ」から読み込む。ダブルクリックで開かず、「データ」タブの「テキストまたはCSVから」で読み込み、「元のファイル」を「65001: Unicode (UTF-8)」や「932: 日本語 (シフト JIS)」に切り替えて、正しく表示される方を選びます。
  3. 取り込み先の条件を確認する。受け付ける文字コード(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が必要な取り込み先では、取り込み先の手順に合わせて変換してください。
  • 取り込みの成功の保証。文字コードが合っていても、項目の並びや桁数などは取り込み先の仕様で確認が必要です。