執筆 更新 6分で読めます

CSV を Excel で開くと文字化けする理由と、3つの直し方

取引先の CSV を Excel で開いたら「譁�ュ怜喧縺�」。原因は Excel が CSV を Shift_JIS と決めて読むこと。ブラウザで BOM 付き UTF-8 に変換する、Excel の取り込み機能で文字コードを指定する、メモ帳で保存し直す、の3つを手順で説明します。

化ける CSV を今すぐ直す

ファイルをドロップすると文字コードを判定し、Excel で文字化けしない形(BOM 付き UTF-8)で保存し直します。

文字化けを直すツールを開く

ファイルはブラウザ内で処理し、どこにも送信されません。

取引先から届いた CSV を Excel で開いたら、名前や住所の列が全部「譁�ュ怜喧縺�」や「����」になっていた。データが壊れたのかと思いますが、ファイルは壊れていません。Excel が CSV を開くときに決めている文字コードと、ファイルを書いた側の文字コードが違うだけです。この記事では、なぜそうなるのかを1分で説明したあと、状況に合わせた3つの直し方を手順で書きます。

なぜ化けるのか:Excel は CSV を Shift_JIS だと思って開く

CSV はただの文字のファイルで、「この文字コードで書いた」という情報を中に持っていません。開くソフトが自分で決めるしかなく、日本語版の Excel は CSV をダブルクリックで開くとき、Shift_JIS(正確には CP932)と決めて読みます。一方、Web サービスの書き出し、Mac のアプリ、プログラムが作る CSV はほとんど UTF-8 です。UTF-8 のバイト列を Shift_JIS のつもりで読むと、別の文字に化けます。

「文字化け」を UTF-8 で保存したバイト列を、UTF-8・Shift_JIS・Windows-1252 の3通りで読んだ結果を並べた図。UTF-8 では元の文字に戻り、Shift_JIS では譁�ュ怜喧縺�、Windows-1252 では 文字化㑠になる。
図 ファイルの中身は同じ。変わるのは読む側の前提だけです。

つまり、直すべきなのはデータではなく「読み方」です。Excel に UTF-8 だと分からせるか、ファイルを Excel の前提(Shift_JIS)に合わせるか、どちらかをすれば元の文字が出てきます。

化け方で分かる、何が起きたか

見え方 何が起きたか 直るか
譁�ュ怜喧縺� UTF-8 のファイルを Shift_JIS として読んだ(Excel で CSV を開いた典型) 直る。ファイルを UTF-8 として読み直せばよい
���� Shift_JIS のファイルを UTF-8 として読んだ(Excel が保存した CSV を Web に入れた典型) ファイルがあれば直る。この見え方の文字列だけでは元に戻せない
文字化㑠UTF-8 を欧文(Windows-1252)として読んだ(海外製メールソフト・Web で起きる) 直る。文字列を貼り付けるだけでも復元できる
ハクサ嵂ス、ア EUC-JP(古い UNIX 系システムの出力)を Shift_JIS として読んだ 直る。EUC-JP として読み直す

見分ける必要はありません。文字化けを直すツールにファイルを入れれば、候補の文字コードそれぞれで読んでみて、読めたものを表示します。

直し方1:ブラウザで BOM 付き UTF-8 に変換する

一番手早く、相手のファイルも Excel の設定も触らない方法です。UTF-8 のファイルの先頭に BOM(バイト順マーク、EF BB BF の3バイト)が付いていると、Excel は「これは UTF-8 だ」と認識して正しく開きます。ツールはこの3バイトを足して保存し直すだけなので、中身のデータは一切変わりません。

  1. 文字化けを直すツールを開き、化ける CSV をドロップします。
  2. プレビューが正しく読めることを確認します(読めなければ「判定した文字コード」を切り替えます)。
  3. 「保存する文字コード」は「UTF-8(BOM 付き・Excel 向け)」のまま「変換して保存」を押します。
  4. 保存された 元の名前_utf8.csv をダブルクリックすると、Excel で正しく開きます。

ファイルはブラウザの中だけで処理され、サーバーには送られません。顧客リストのような、外に出せないファイルにそのまま使えます。

直し方2:Excel の「データの取り込み」で文字コードを指定する

ファイルを変えたくない、あるいは何度も届くファイルをその場で開きたい場合は、Excel 側で文字コードを指定して読み込みます。ダブルクリックではなく取り込み機能を使うのがポイントです。

  1. Excel で空のブックを開き、「データ」タブ →「テキストまたは CSV から」を選びます(Excel 2016 以降。古い版では「外部データの取り込み」→「テキストファイル」)。
  2. CSV を選ぶと、取り込みのプレビュー画面が出ます。左上の「元のファイル」を 「65001: Unicode (UTF-8)」に変えます。プレビューの文字が正しくなるのを確認します。
  3. 「読み込み」を押します。データがテーブルとしてシートに入ります。

この方法は元の CSV を変更しません。ただし、ダブルクリックで開くたびに同じ手順が要ります。頻繁に届くファイルなら、送り主に BOM 付き UTF-8 か Shift_JIS で出力してもらう方が楽です(後述)。

直し方3:メモ帳で開いて保存し直す

Windows のメモ帳でも同じことができます。メモ帳は文字コードを自動判定して開くので、化けずに表示されるはずです。

  1. CSV を右クリック →「プログラムから開く」→「メモ帳」。
  2. 「ファイル」→「名前を付けて保存」。ダイアログ下部の「文字コード」を 「UTF-8 (BOM 付き)」にして保存します(Windows 10 バージョン 1903 以降のメモ帳にこの選択肢があります)。
  3. 保存したファイルを Excel で開きます。

数十 MB を超える大きな CSV はメモ帳では重くなります。その場合は直し方1か2の方が向いています。

逆のケース:Excel で保存した CSV が Web で化ける

Excel で「CSV(コンマ区切り)」として保存したファイルは Shift_JIS になります。これを Web サービスやプログラム(UTF-8 前提)に入れると、今度はそちらで「����」や「�}�X�g」のように化けます。

  • Excel 2016 以降なら、「名前を付けて保存」のファイルの種類で 「CSV UTF-8 (コンマ区切り)」を選びます。BOM 付き UTF-8 で保存され、Web でも Excel でも化けません。
  • すでに Shift_JIS で保存したファイルは、文字化けを直すツールに入れて「UTF-8」(相手が BOM を受け付けないシステムの場合)か「UTF-8(BOM 付き)」で保存し直します。
  • 逆に、相手が古い基幹システムで Shift_JIS しか受け付けない場合は、同じツールで「Shift_JIS」を選びます。絵文字や「𠮷」のような拡張漢字は Shift_JIS に無いため「?」になります。変換前に該当文字の一覧が表示されるので、確認してください。

二度と化けないために

  • 受け取る側:CSV はダブルクリックで開かず、「データの取り込み」で開く習慣にすると、どの文字コードでも化けません。
  • 送る側:Excel から出すなら「CSV UTF-8」形式で保存する。プログラムから出すなら BOM 付き UTF-8 で書く(Python なら encoding="utf-8-sig")。相手が Excel で開くと分かっているなら、これが一番トラブルが少ない選択です。
  • Mac と Windows の間:Mac の Numbers や Excel も同じ問題を持ちます。CSV UTF-8 で統一すれば両方で開けます。

連絡先の VCF を CSV にしたい場合は、VCF を CSV に変換して Excel で開く方法で扱っています。こちらの変換ツールは最初から BOM 付き UTF-8 で書き出すので、この記事の問題は起きません。

まとめ

  • CSV が Excel で化けるのは、Excel が Shift_JIS と決めて読むから。データは壊れていない。
  • 直すには、ブラウザで BOM 付き UTF-8 に変換する、Excel の「データの取り込み」で 65001 を指定する、メモ帳で「UTF-8 (BOM 付き)」で保存し直す、の3つ。
  • Excel から出す側は「CSV UTF-8 (コンマ区切り)」で保存すれば、Web でも Excel でも化けない。
  • 「�」に置き換わってしまった文字列は、その文字列からは戻せない。元のファイルを読み直す。

よくある質問

直したのに、Excel で保存し直したらまた化けました。
Excel の「名前を付けて保存」で「CSV(コンマ区切り)」を選ぶと Shift_JIS で書き出されます。Web システムに渡すなら「CSV UTF-8(コンマ区切り)」を選んでください。同じ CSV でも、渡す先によって正解の文字コードが違います。
Mac の Excel でも同じですか?
同じ問題は起きますが、既定の文字コードが違うため化け方が変わります。Mac の Excel も BOM 付き UTF-8 なら正しく開けるので、対処は同じです。
Google スプレッドシートなら化けませんか?
ほとんど化けません。Google スプレッドシートは取り込み時に文字コードを自動判定し、外れた場合も取り込みの画面で指定し直せます。Excel でなくてよい作業なら、こちらのほうが手間は少ないです。

この記事を書いた人

Ren

OpenedFile 開発者

OpenedFile を一人で作って運用しています。きっかけは、届いたメールの winmail.dat がどうやっても開けなかったこと。見つかるオンライン変換サービスはどれも「まずファイルをサーバーにアップロードしてください」というものばかりでした。それなら自分で書こうとTNEF パーサをフルスクラッチで実装し、以来このサイトのツールはすべてブラウザ内で完結しています。

OpenedFile について

この記事をシェア