文字化けで何が起きているのか
CSVを開いて「縺ゅ>縺・」や「繝・繝シ繧ソ」と表示されたとき、データは壊れていません。ファイルの中身は正しいバイト列のまま、読み込む側が別の文字コードとして解釈しているだけです。
同じ「データ」という文字も、UTF-8で保存してShift-JISとして開けば「繝・繝シ繧ソ」になります。つまり文字化けは保存側と読み込み側の文字コードの食い違いであり、正しい文字コードで開き直せば元に戻ります。
- MDN Web Docs — エンコーディング — 文字コードの技術的解説(公式)
- RFC 4180 — CSV形式 — テキスト形式としての前提
日本語CSVの2大文字コード
| 文字コード | 主な用途 | 特徴 |
|---|---|---|
| Shift-JIS(CP932) | Windowsの国内業務ソフト、Excel従来形式、官公庁 | 日本語2バイト。絵文字・一部の漢字は扱えない |
| UTF-8 | Web、クラウド、モダンなシステム全般 | 世界共通。BOMの有無で挙動が分かれる |
「BOM(バイトオーダーマーク)」はUTF-8ファイル先頭の目印で、ExcelはBOMがあるとUTF-8と判定できます。そのためExcelで開く前提なら「UTF-8(BOMあり)」=Excelの「CSV UTF-8」形式が安全です。
この検索は「CSVをUTF-8で保存するとはどういうことか」という意味です。答えは:ファイル内の文字をUTF-8という共通規格で記録すること。相手のシステムがUTF-8を要求しているなら、保存時に文字コードをUTF-8へ切り替えるだけで解決します。
原因の特定手順
- メモ帳(またはVS Code)でファイルを開くエディタは通常、文字コードを自動判定します。正しく見えたら原因は開き方(Excelの想定)側にあります。
- エディタでも化ける場合、別のエンコードで開き直すVS Codeなら「エンコード付きで再開」から Shift-JIS/UTF-8 を順に試します。どれかで正しく見えたら、その文字コードがファイルの本当の文字コードです。
- 化けた状態で上書き保存していないか確認する上書き済みなら「直らない場合」の章へ。未保存なら次の修復手順に進めます。
- MDN — エンコーディング
- VS Code 公式 — エンコードの再指定 — 切り分けに使える公式機能
直し方① Excelのインポートで開き直す(推奨)
- CSVをダブルクリックせず、Excelの空ブックを開く
- 「データ」→「テキスト/CSVから」でファイルを選ぶ
- プレビューの「元のファイル」で文字コードを切り替えるUTF-8なら「65001」、Shift-JISなら「932」。プレビューの日本語が正しくなれば成功です。
- そのまま「読み込み」を押す正しく表示された状態でシートに展開されます。
この方法ならファイルを書き換えないため、安全度がもっとも高いです。
- Microsoft サポート — テキスト/CSVのインポート — 文字コード指定の公式手順
直し方② 文字コードを変換して保存し直す
相手側が要求する文字コードに合わせてファイル自体を変換します。1ファイルならメモ帳で十分です。
- メモ帳でファイルを開く正しく表示されるエンコードで開けている前提です。
- 「名前を付けて保存」→「エンコード」を変更ANSI(=Shift-JIS)またはUTF-8に変えて保存します。
- 相手のシステムで開いて確認する必ず変換後に受入テストを行ってください。
大量のファイルを一括変換するならコマンドラインが早いです。
# フォルダ内の .csv をまとめて UTF-8(BOM付き)に変換
Get-ChildItem *.csv | ForEach-Object {
$t = Get-Content $_.FullName -Encoding Default
$t | Set-Content $_.FullName -Encoding UTF8
}
- Microsoft Learn — PowerShell ドキュメント — Get-Content / Set-Content の公式リファレンス
直し方③ プログラム側でエンコーディングを指定
コードで読む場合は、開くたびに明示的に指定するのが唯一の根本対策です。日本語CSVで使う指定は実質この4つです。
| 指定値 | 意味 | 使う場面 |
|---|---|---|
cp932 | Windows版Shift-JIS | 国内業務ソフト由来のCSV |
shift_jis | 純粋なShift-JIS | 古い官公庁データ(一部の記号がcp932と差異) |
utf-8 | UTF-8(BOMなし) | Web・クラウド由来のCSV |
utf-8-sig | UTF-8(BOMあり) | Excelの「CSV UTF-8」で保存したファイルの読み書き |
import pandas as pd
# Excel保存のCSVを読む(BOMの有無を気にしなくてよい)
df = pd.read_csv("data.csv", encoding="utf-8-sig")
# 日本国内の業務システムのCSV
df2 = pd.read_csv("data2.csv", encoding="cp932")
エラーが出た場合は 読み書きの専用ページ の「encoding指定の早見表」を参照してください。
二度と起きないための運用ルール
- 受け渡しのたびに文字コードを取り決める「外部への提出はShift-JIS、ツール連携はUTF-8」のように口頭でなく文書で固定します。
- ファイル名に文字コードを入れる「sales_2026_utf8.csv」のようにすれば、受け取った側が判断できます。
- Excelで渡すときは「CSV UTF-8」に統一古い環境で化ける事例が出たときだけ、その相手に限りShift-JISへ。
- 変換は必ず「コピー」に対して行う元ファイルは絶対に上書きしない。
- Microsoft サポート — CSV形式 — 保存時の公式推奨
直らない場合(上書きしてしまったとき)
文字コードの取り違えで表示が崩れているだけの状態なら、正しいコードで開き直せば元に戻ります。しかし化けた表示のまま保存すると、元のバイト列が失われてどの文字コードで開いても戻りません。
対処の選択肢:
- 元データの取得源(システムのエクスポート元・送り主)から再入手する
- Outlook等のメール添付・共有フォルダの履歴に元ファイルが残っていないか探す
- ごく一部のパターン(UTF-8→SJIS→UTF-8 の往復など)では手動修復ツールが効くこともあるが、期待値は低い
「上書き前の状態に戻す」は文字化け対策ではなくバックアップ運用の問題です。重要なCSVは受け取った時点でコピーを取る習慣をつけてください。
- MDN — エンコーディング — 不可逆性の技術的理由
よくある質問
Q.CSVの文字化けはなぜ起きますか?
保存時と読み込み時の文字コードが違うためです。日本語CSVはShift-JISとUTF-8が並存しているため、どちらを開くかが常に問題になります。
Q.Excelで開いて化けた場合の一番簡単な直し方は?
「データ」→「テキスト/CSVから」で開き直し、プレビューで文字コードを65001(UTF-8)か932(Shift-JIS)に切り替える方法です。ファイルを書き換えないので安全です。
Q.文字化けしたCSVをそのまま保存してしまいました。直りますか?
原則直りません。元データを取得源から再入手してください。表示が崩れているだけの段階ならまだ間に合います。
Q.UTF-8とUTF-8(BOMあり)の違いは?
BOMはファイル先頭の3バイトの目印で、ExcelがUTF-8と判定するために役立ちます。プログラムによってはBOMでエラーになるため、BOMなしUTF-8を要求する相手には注意します。
Q.送られてきたCSVの文字コードを知る方法は?
VS Codeで開けばステータスバーに判定結果が表示されます。メモ帳でも「名前を付けて保存」画面のエンコード欄で現在の判定を確認できます。