CSVの文字化けはなぜ起きるのか。UTF-8とShift_JISの違いと、Shift_JISへ変換する方法
UTF-8で作ったCSVをExcelで開くと日本語が崩れるのは、読み込む側が別の文字コードだと思い込んで読むからです。Excelで見るだけならBOM付きUTF-8で足ります。取り込み先がShift_JISを指定しているときの変換方法と、変換で化ける記号の扱いまでまとめました。
ネットショップの管理画面やWebサービスから書き出したCSVを、Excelでダブルクリックして開いたら日本語が読めない記号の列になっていた。逆に、手元で作ったCSVを取り込ませたら、管理画面の側で商品名が化けた。どちらも原因は同じで、ファイルを書いた側と読んだ側で、文字コードの前提が食い違っています。
ExcelやShift_JISを前提にした管理画面で読ませたいなら、当サイトのCSV文字コード変換にCSVを入れるだけで、Shift_JISに変換したCSVがダウンロードされます。設定項目はなく、CSVはサーバーへ送らずにブラウザの中で変換します。

文字化けは「読み違い」で起きる
コンピューターの中では、文字は数値の並びとして保存されています。「あ」をどの数値で表すかの決まりが文字コードで、日本語のCSVでよく出会うのはUTF-8とShift_JISの2つです。同じ「あ」でも、UTF-8とShift_JISでは保存される数値が違います。
CSVはただのテキストファイルなので、中身を見ただけでは「どちらの決まりで書かれたか」が確実にはわかりません。読み込む側は、どちらかを仮定して数値を文字に戻します。仮定が外れると、本来とは別の文字に戻されてしまいます。これが文字化けです。データが壊れたわけではなく、正しい文字コードで読み直せば元に戻ります。
ExcelがUTF-8のCSVを化けさせる理由
最近のWebサービスが書き出すCSVは、多くがUTF-8です。一方、日本語版WindowsのExcelでCSVをダブルクリックすると、Shift_JISとして読まれる場合があります。UTF-8で書かれた数値をShift_JISの決まりで読むので、日本語が化けるわけです。
Microsoftのサポートページによると、UTF-8のCSVでも先頭にBOM(UTF-8で書かれていることを示す3バイトの印)が付いていれば、Excelは通常どおり開けるとのことです。BOMが付いていない場合は、ダブルクリックではなく「データ」タブの「テキストまたはCSVから」で読み込み、文字コードにUTF-8を指定すれば正しく表示できます。
つまり、Excelで中身を見たいだけなら、Shift_JISへ変換する必要はありません。BOM付きのUTF-8で保存し直すか、Excelの読み込み機能を使えば足ります。
Shift_JISへの変換が必要になるのは、取り込み先が指定しているとき
変換が必要になるのは、CSVを受け取るシステムがShift_JISを前提にしている場合です。ネットショップの商品一括登録や、業務システムへのデータ取り込みでは、いまでもShift_JISのCSVを求められることがあります。楽天市場の商品一括編集でも、CSVをShift_JISで作るよう案内する解説があります(出典は記事末尾)。
このときUTF-8のCSVをそのまま渡すと、システムはShift_JISとして読むので、取り込まれた商品名や説明文が化けます。取り込み自体がエラーで止まることもあります。
Shift_JISにはない文字がある
UTF-8からShift_JISへの変換で厄介なのは、UTF-8では書けてもShift_JISには存在しない文字があることです。Shift_JISが扱える文字はUTF-8よりずっと少なく、次のような文字は変換するとそのままでは残りません。
- 絵文字
- ™ や © などの記号の一部
- 丸数字(①)や「㈱」のような囲み文字(Windows版の拡張Shift_JISでは表せるものもあります)
- 「髙」や「﨑」のような、いわゆる旧字体や異体字の一部
- アクセント記号付きのアルファベット(é など)
テキストエディタで「Shift_JISで保存」を選ぶだけだと、こうした文字は疑問符に置き換わったり、黙って消えたりします。商品説明の途中に疑問符が混ざっていても、目で探さない限り気付けません。
CSV文字コード変換ツールでの手順
当サイトのCSV文字コード変換は、UTF-8のCSVをShift_JIS(Windowsで使われる拡張版のWindows-31J)に変換するツールです。CSVをブラウザの画面に入れるだけで動き、設定項目はありません。
- ツールのページを開き、UTF-8のCSVを枠にドラッグ&ドロップします。スマホやタブレットなら「ファイルを選択」から。
- Shift_JISで表せない文字がなければ、変換したCSVがそのままダウンロードされます。ファイル名は、元の名前の末尾に「_sjis」を付けたものです。
- 表せない文字があれば、直し方を選ぶ画面が出ます。選んでから「変換してダウンロード」を押してください。
変換の前に、よく化ける文字は自動で置き換えています。たとえば「①」は「(1)」、「©」は「(C)」、波ダッシュの 〜 は全角チルダの ~、「㈱」は「(株)」、「髙」は「高」。絵文字は取り除かれます。
自動で置き換えられない文字が残った場合は、文字ごとに直し方を選べます。選択肢は「おすすめに置き換える」「削除する」「半角スペースに置き換える」「自分で入力」の4つで、おすすめの候補がある文字には最初からおすすめが選ばれています。画面にはその文字が最初に出てくる行と列、前後の文字も出るので、どこの何が問題なのかを確かめてから選べるはずです。同じ文字が何か所にあっても、選んだ直し方はすべての箇所に適用されます。
改行コードは、Windowsで標準のCRLFにそろえて出力します。
変換の前後で気を付けること
このツールが受け付けるのはUTF-8のCSVだけです。すでにShift_JISのファイルを入れると「すでにShift-JISのようです」と表示され、変換はしません。UTF-8でもShift_JISでもない文字コードのファイルも、保存し直すよう案内が出て止まる仕組みです。
ファイルはサーバーへ送られず、ブラウザの中だけで変換されます。顧客情報や仕入れ値の入ったCSVでも、外部のサービスへアップロードしなくて済みます。
文字の置き換えは、意味を保つことを優先していても、元の表記とは変わります。「髙橋」を「高橋」にしてよいかのように、人名や商品名の表記は判断が分かれます。変換したCSVを取り込む前に、置き換わった箇所の表記を確認してください。
変換の処理は、GitHubで公開しているスクリプトshiftjis-csv-exporter(MITライセンス)をブラウザで動くようにしたものです。