CSVが文字化けする原因と直し方
CSVの日本語が崩れる原因を切り分け、Excelへの読み込み・文字コード変換・BOMを選ぶ手順。3種類の検証用CSVと、先頭ゼロを守る確認ポイントを掲載。
更新: · PitaTool
まず、元のCSVを正しく読み込めるか確認する
別の文字コードを指定すると日本語が正しく表示されるなら、読み込み側の設定が原因と考えられます。元ファイルをコピーして残し、文字コード判定で候補と本文を確認してください。候補が複数ある場合は、作成元の指定も確認します。
元データ自体が「?」や置換文字「�」に書き換わっている場合、BOM追加や別形式での保存だけでは失われた文字を復元できません。上書きを止め、作成元から再取得・再出力できるか確認します。
症状から原因と対処を選ぶ
| 症状 | 確認すること | 次の操作 |
|---|---|---|
| 日本語だけが崩れる | 作成時と読み込み時の文字コード | 候補を確認し、正しい文字コードで開く |
| UTF-8なのにExcelで直接開くと崩れる | BOMの有無と開き方 | データから読み込む、またはBOM付きUTF-8を試す |
| ①や髙だけ保存できない | strict Shift_JISとCP932の違い | 互換性を確認し、提出先の形式を選ぶ |
| 全項目が1列に入る | カンマ/タブなどの区切り | 区切り文字を合わせる |
| 001が1になる | 表計算ソフトの型変換 | ID列を文字列として読み込む |
| 正しく開いても既に?が入っている | 元ファイルの破損・有損変換 | バックアップか作成元から再取得する |
Excelでは、直接開く方法とデータとして取り込む方法を分ける
Microsoftの公式案内では、BOM付きUTF-8のCSVは通常の方法で開けます。BOMなしのUTF-8は、Power Queryやテキストのインポート機能で読み込む方法が案内されています。BOMは読み込みの手掛かりであり、本文の文字コードを変える処理ではありません。
- 元のCSVを複製し、Excelで空のブックを開きます。
- 対応するデスクトップ版では「データ」→「テキストまたはCSVから」で読み込みます。文字コードと区切りをプレビューで確認します。
- IDや長い番号を含む列は、自動数値変換を避けるため文字列として扱う設定を確認してから読み込みます。
- 日本語、001などの先頭ゼロ、行数・列数を元データと照合します。
メニュー名や機能はExcelの版・OSにより異なります。ここでの画面操作は公式案内に基づくデスクトップ版の例です。すべての版を実機検証したものではありません。
提出先に合わせてCSVを保存・変換する
相手がUTF-8を指定しているならUTF-8、CP932を指定しているならCP932で保存します。「Shift_JIS」とだけ指定された場合は、CP932の拡張文字を受け付けるかも確認してください。拡張子を.csvへ変えるだけでは文字コードは変わりません。
- CSV文字コード変換で、元の本文が正しく読める入力文字コードを選びます。
- 出力形式とBOMの有無を提出先の指定に合わせ、変換します。
- 保存したファイルを指定した文字コードで再確認し、氏名・ID・行列が変わっていないか確認します。
Excelで編集した場合は、利用中の版に「CSV UTF-8」の保存形式があるか確認します。保存した名称だけに頼らず、出力後のファイルを再検査してください。既に失われた先頭ゼロを文字コード変換で復元することはできません。
同じ本文の3ファイルで違いを試す
以下はPitaToolが生成した架空の顧客データです。日本語・先頭ゼロ・カンマを含むセル・二重引用符を入れ、同じ本文を3形式で保存しました。いずれも見出しを含め3レコード、3列、改行はCRLFです。
顧客ID,氏名,備考
001,山田太郎,"東京,大阪"
002,佐藤花子,"引用符は""二重"""
文字コード判定とCSV診断に各ファイルを入力し、正しい設定で同じ本文・列数になることを確かめます。CP932とstrict Shift_JISの両方で読めるファイルもあるため、判定候補だけでは元の形式を確定できません。これは本站エンジンの検証例で、Excelの全バージョンの挙動を実測したものではありません。
変換しても解決しない場合
CSVの引用符や列数の誤り、必須項目の不足、入力先独自の禁止文字は別の問題です。見た目が直った段階で終えず、取り込み先の仕様と照合してください。顧客データを使う前に、このページのサンプルなどで処理の流れを確認できます。
ツールで確認する
CSV文字コード変換を使う →関連する解決ガイド
参考資料・検証の前提
具体例は各項目に示す条件に基づきます。ソフトの版や受け渡し先の仕様も確認してください。