CSVの文字化けを防ぐには?UTF-8とShift_JISの違いをExcelとPythonで実務向けに整理
CSVの文字化けは、ファイルの中身が壊れているのではなく、保存時の文字コードと開く側の想定がずれているときに起きることがほとんどです。
先に答えを書くと、いま新しく作るCSVは UTF-8を基本 にしつつ、Excelでそのまま開かせる必要がある場面では BOM付きUTF-8 を使うのが実務では安全です。古い業務システムや一部のWindows向け連携では、相手側の指定に合わせて Shift_JIS系(実務ではcp932を含む扱い) を選ぶ場面が残ります。
- UTF-8: 多言語に強く、WebやAPI、Pythonとの相性がよい
- Shift_JIS: 日本語Windowsの古い運用でまだ使われる
- Excelで文字化けしやすい点: UTF-8でもBOMなしだと意図どおり開けないことがある
- Pythonの基本:
open(..., encoding=...)を必ず明示する - 実務の判断: 「誰が何で開くか」を先に決めると失敗しにくい
ここがポイント: CSVの対策は「UTF-8が正しいか」ではなく、「保存時と読込時で同じ文字コードを使えているか」で決まります。
まず押さえたい前提環境
この記事は、次のような場面を想定しています。
- Windows版ExcelでCSVを直接開く
- Python 3.12系でCSVを読み書きする
- 日本語を含む顧客名、住所、商品名、メモ列を扱う
- CSVをメール添付、共有フォルダ、業務システム連携で受け渡す
バージョン差で細かい挙動は変わりますが、Microsoftはサポート記事で、UTF-8のCSVはBOM付きなら通常どおり開ける と案内しています。BOMがない場合は、Excelの「データの取得」から読み込む方法が案内されています。
UTF-8とShift_JISは何が違うのか
ここを曖昧にすると、対策も曖昧になります。違いはかなり実務的です。
UTF-8
現在の標準候補 です。Web、API、JSON、Markdown、データ基盤、Pythonの多くの処理系で前提になっています。
向いている場面は次のとおりです。
- 日本語と英語が混ざるCSV
- 絵文字や機種依存文字に近いデータを含む可能性がある
- Python、Node.js、GAS、API連携に流す
- 将来的に他システムへ再利用する
Shift_JIS
日本語Windowsの業務運用で長く使われてきた文字コードです。今でも古い基幹系、会計ソフト向け取込、既存マクロ運用では指定されることがあります。
ただし、UTF-8より扱える文字の幅が狭く、次のような場面で詰まりやすくなります。
- 一部の記号や特殊文字が保存できない
- システム間連携で再利用しにくい
- Web系のツールと混ぜると文字コード指定が増える
実務で重要な見分け方
「UTF-8とShift_JISのどちらが優れているか」ではなく、次で決めるのが現実的です。
- Excelでダブルクリックして開く運用か
- 取込先システムが文字コードを明示しているか
- PythonやAPIで後続処理するか
- 日本語以外の文字が混ざる可能性があるか
新規設計ならUTF-8寄り、既存システム連携なら相手指定優先。まずはこの整理で十分です。
文字化けが起きる典型パターン
CSVの中身そのものより、開き方で失敗するケースが多いです。
1. UTF-8で保存したのにExcelで直接開いた
UTF-8のCSVでも、Excel側が期待する形で読めないと、日本語が崩れることがあります。特に BOMなしUTF-8 をそのまま開く運用は要注意です。
2. Shift_JIS指定のファイルをUTF-8として読んだ
Pythonやエディタで読み込むと、
