CSVの文字化けを直す方法(UTF-8・Shift_JISの違いと対処法)
CSVの日本語が文字化けする原因を症状別に整理。UTF-8・BOM・Shift_JISの違い、Excelの取り込み設定、文字コード変換の手順、復元できないケースを具体例で解説します。
最初に行うことは、元のCSVをコピーして残すことです。文字化けした画面のまま上書き保存せず、読み込む文字コードを指定し直してください。表示だけの問題なら、ファイルを書き換えずに解決できる場合があります。
症状から原因を切り分ける
CSVは文字をバイト列として保存するテキスト形式です。日本語が意図しない文字に見える場合、保存時と読み込み時の文字コードが一致していない可能性があります。ただし、列ずれや数値の変化は別に確認します。
| 症状 | 確認する点 | 最初の対処 |
|---|---|---|
| 英数字は読めるが日本語が崩れる | UTF-8とShift_JISの読み違い | 作成元の仕様を確認し、入力文字コードを指定 |
| 1列に全部入る・列がずれる | カンマ・タブ等の区切りや引用符 | 区切り文字とCSV構文を確認 |
| 00123が123になる | 表計算ソフトの数値への自動変換 | 文字列として取り込む |
| 一部が?や�になって保存されている | 過去の変換・保存で文字が失われた可能性 | 上書き前の原本や作成元から再取得 |
元データに「?」が含まれることもあるため、記号があるだけでは破損と断定できません。別の読み込み設定で正しく表示できるか、作成元の値と照合します。
UTF-8・BOM・Shift_JISの違い
同じ「あ」でもUTF-8では E3 81 82、Shift_JISでは 82 A0 という異なるバイト列になります。拡張子が.csvでも、どの文字コードかは拡張子だけでは分かりません。
| 形式 | 特徴 | 選ぶ場面 |
|---|---|---|
| UTF-8 | 日本語・多言語・絵文字等を扱えるUnicodeの符号化方式 | 取込先がUTF-8を指定するとき |
| UTF-8 BOM | 先頭にEF BB BFを付け、UTF-8の識別を助ける | Excelで開く用途の候補。取込先のBOM対応も確認 |
| Shift_JIS | 日本語の業務システムで指定されることがある。表現できる文字に制限 | 受取先が明示的に指定するとき |
BOM付きも文字本体はUTF-8です。UTF-8ではBOMは文字コードの目印であり、バイト順の切替には使いません。BOMを想定しないシステムでは列名の照合などに影響する場合があります。UnicodeのBOM解説でも、利用する形式・プロトコルに応じた扱いが説明されています。
「Shift_JIS」「CP932」の表記も確認する
Windowsのコードページ932やWindows-31Jという名称を見かけることもあります。これらと厳密なShift_JISでは拡張文字等の扱いに差があるため、名称だけで完全互換とは判断しません。機種依存文字・記号を含む場合は、受取先の仕様と実データで確認します。ブラウザのShift_JISデコードにもWeb標準の対応規則があります。Microsoftのコードページ一覧とWHATWGの文字コード対応表を参照してください。
Excelの読み込み設定を直す
Excelで見ることだけが目的なら、CSVを変換する前に取り込み時の指定を試せます。以下は主にデスクトップ版Excelの手順です。OS・バージョンによって名称や利用できる機能が異なります。
- CSVをダブルクリックせず、Excelで空のブックを開きます。
- 「データ」から「テキストまたはCSVから」を選択します。環境によっては「データの取得」→「ファイルから」の中にあります。
- 元のCSVを選び、プレビューの「元のファイル」等でUTF-8(65001)または日本語のコードページ(932)を、作成元の仕様に合わせて指定します。
- 区切り文字を確認します。日本語、列名、複数行が正しいかを見てから読み込みます。商品コード等は「データの変換」で文字列型も指定します。
MicrosoftのUTF-8 CSV案内は、BOM付きでの読み込みと、BOMがない場合のPower Query等を使う方法を説明しています。BOMは先頭ゼロの自動変換を防ぐ設定ではありません。
CSV自体の文字コードを変える
取込先システムに渡す必要があるときは、正しい入力文字コードで読み、相手が要求する文字コードへ出力します。CSVの文字コード変換ツールなら、ファイルを外部にアップロードせず処理できます。
- 元のCSVを選択します。DataTools JPは20MB以下のCSVに対応します。
- 「入力文字コード」を指定します。自動判定はUTF-8を優先し、読み込めない場合にShift_JISを試す方式です。表示が不自然なら、作成元に合わせて明示指定してください。
- 「CSVの区切り文字」を指定し、「出力文字コード」を選びます。Excel向けならUTF-8 BOMが候補、Shift_JIS指定の業務システム向けならShift_JISです。
- 「出力改行コード」は、仕様に指定がなければ「変更しない」から確認します。CRLF・LFへの変更はセル内改行にも適用されます。
- 「プレビューを更新」で日本語や列を確認してから「CSVをダウンロード」を押し、取込先でも内容を確認します。
自動判定は文字コードを証明するものではありません。また、全体の検証で数式候補の文字列やShift_JISで保持できない文字が見つかった場合は、安全性やデータ損失防止のため出力を停止します。元ファイルは変更されません。
商品一覧で確認する具体例
次の架空のCSVがUTF-8・BOMなしで出力され、Excelの開き方によって日本語が崩れるケースを考えます。
商品コード,商品名,価格
00123,ノート,1200
00456,ペン,250作成元がUTF-8と分かっていれば、ツールの入力を「UTF-8 / UTF-8 BOM」、区切りを「カンマ」、出力を「UTF-8 BOM(Excel向け)」にします。文字コード変換では商品名の文字、行・列の内容を保ったまま先頭に識別用のBOMを付けます。実際にExcelで開き直して日本語を確認してください。
ただし、この処理だけでは商品コード00123が数値123として取り込まれることがあります。コードを文字列型で共有したい場合は、CSVをExcelに変換する方法で説明する.xlsx化や、列の型を指定した取り込みを選びます。
直せないケースと確認項目
- 上書き保存で本来の文字が「?」等に置換されていたら、文字コードを変えるだけで元の文字を特定できません。原本を再取得します。
- 絵文字や拡張文字を含む場合、Shift_JISへの変更は無理に進めず、UTF-8対応を取込先に確認します。
- UTF-16・EUC-JP等はDataTools JPの入力対象外です。作成元からUTF-8または対応するShift_JISで再出力してください。
- 列数の不一致や引用符のエラーは、文字コードとは別に区切り文字・CSV構文を確認します。
文字が正しく見えることに加え、ヘッダー、行数、識別子、記号を確認してください。プレビューは先頭20行なので、ダウンロード後は必要に応じて後半のデータも照合します。
参考資料
文字コードの基礎はUnicode・WHATWG・Microsoftの仕様資料、Excelの操作はMicrosoft Supportを確認し、ツール固有の設定名・停止条件はDataTools JPの実装と照合しました。
よくある質問
UTF-8 BOMにすれば必ず直りますか?
ExcelがUTF-8を判別しやすくなる場合がありますが、元の文字列がすでに壊れている場合は直りません。BOMを受け付けない取込先もあるため、相手の仕様を確認してください。
自動判定で読めれば文字コードは確定ですか?
確定ではありません。英数字だけのファイルなど、複数の文字コードで同じように読めるケースがあります。作成元の仕様と日本語を含む行を確認してください。
絵文字を含むCSVをShift_JISにできますか?
絵文字など保持できない文字があります。DataTools JPは無断で置換せず停止するため、取込先が対応していればUTF-8で出力してください。
文字化けを直せば先頭ゼロも戻りますか?
別の問題です。文字コードを直しても、数値として保存されて失われたゼロは戻りません。元CSVから文字列として取り込むか、CSV → Excel変換を使ってください。