ぱんだツールズぱんだツールズ

文字コード・エンコーディング

CSVの文字化けはなぜ起きる?Shift_JISとUTF-8の違いを図解

約6分

ExcelでCSVを開いたら「繧オ繝シ繝薙せ」みたいな呪文が並んでいた——そんな経験、一度はあるはず。 業務でCSVを扱うなら避けて通れない「文字化け」は、じつは文字コードの解釈のズレという、 たった1つの原因から生まれます。この記事ではその仕組みを、図解ベースで丁寧に解説します。

文字化けはなぜ起きるのか

コンピュータは文字を数値で扱っています。たとえば「あ」という文字は、Shift_JISでは0x82A0という2バイト、 UTF-8では0xE38182という3バイトで表現されます。保存する側と読み込む側で同じ規則を使っていれば問題ありませんが、保存時はUTF-8、読み込み時はShift_JISのようにズレが起きると、コンピュータは 「間違った規則で文字を探してしまい」、結果として意味不明な文字列が表示されます。

CSVファイルにはこの「どの文字コードで保存されているか」の情報が入っていないため、開く側のアプリが 推測するか、デフォルト設定に従うしかありません。これが文字化けが起こる根本原因です。

Shift_JIS と UTF-8 — 2つの文字コードの違い

日本語のCSVを扱うとき登場する文字コードは、ほぼこの2つだけです。ざっくり特徴を比べると次の通り。

Shift_JISUTF-8
扱える文字ASCIIと日本語世界中すべての文字
日本語1文字のサイズ2バイト3バイト
よく使うアプリWindows版Excel(既定)Web全般、macOS、Googleスプレッドシート
今後の主流徐々に減少事実上の世界標準

「BOM」の正体

Excelで文字化けを回避するキーワードとしてBOM(Byte Order Mark)があります。 これはファイルの先頭に置く「このファイルはUTF-8で書かれています」という目印です。 3バイト(EF BB BF)の不可視データで、 Excelはこれを見つけるとUTF-8として読み込んでくれます。

ただしBOMはすべての環境で歓迎されるわけではありません。たとえばプログラムがCSVを読む場合、 BOMが「最初のセルの値」として混入してしまい、バグの原因になることもあります。Excelで開くならBOM付き、プログラムで処理するならBOMなし、と用途で使い分けるのが実務的です。

文字化けの直し方

実際に文字化けしたCSVに遭遇したときの対処は、大きく分けて2つあります。

  1. 正しい文字コードで開き直す:メモ帳やVS Codeで開いてBOMを付けて保存し直す、 ExcelならPower Queryの「テキスト/CSVから」でエンコードを指定してインポートする方法があります。
  2. 変換ツールで一括変換する:大量のファイルや急ぎのときは、CSV文字コード変換ツールを使えばブラウザ上で即座にShift_JIS↔UTF-8を変換できます。ファイルはサーバーに送られません。

関連する処理

CSV処理ではエンコーディング以外にも、列の並べ替え・複数ファイルの結合・Excel形式との変換などで 詰まりやすいポイントがあります。以下のツールが役立ちます。

まとめ

CSV文字化けは「保存時の文字コードと読み込み時の解釈のズレ」が原因。 Shift_JISとUTF-8の違い、BOMの役割を理解しておけば、文字化けに遭遇しても原因切り分けが速くなります。 運用としては「UTF-8 with BOMで保存」が多くの場面で無難な選択です。

よくある質問

ExcelでCSVを開くと文字化けするのはなぜ?

ExcelはOS設定によってCSVをShift_JIS(日本語Windows)として読もうとするため、UTF-8で保存されたCSVを開くと文字化けします。逆にExcelから書き出したCSVは既定でShift_JISになるため、他のアプリ(Googleスプレッドシート等)で開くと化けることがあります。

Shift_JISとUTF-8はどう違うの?

どちらも文字を数値に変換する規則ですが、範囲と方式が異なります。Shift_JISは日本語に特化した1〜2バイトの可変長で、ASCIIと日本語のみを扱えます。UTF-8は世界中の文字を1〜4バイトで表現できる国際標準です。現代のアプリは基本的にUTF-8を前提としています。

BOMって何?つけた方がいいの?

BOM(Byte Order Mark)はファイルの先頭に置かれる「このファイルはUTF-8です」という目印です。3バイト(EF BB BF)で、Excelに「UTF-8で読んで」と伝えるために使われます。ただし一部のプログラムではBOMが余計なデータとして扱われ不具合の原因になるため、用途に応じて付け外しを選ぶ必要があります。

Excelで文字化けしないCSVを作るには?

①UTF-8 with BOMで保存する、②またはShift_JISで保存する、の2択です。Googleスプレッドシートや他ツールと共有するならUTF-8 with BOMが安全。Excel専用ならShift_JISでも問題ありません。変換が面倒な場合は本サイトのCSV文字コード変換ツールを使ってください。

文字化けを「戻す」ことはできる?

元の文字コードが分かれば元に戻せます。「縺ゅ>縺・▲」のような化け方はUTF-8をShift_JISとして読んだ典型例、「髢ィ縺・や」はその逆です。化け方のパターンで元のエンコーディングを推測し、正しい文字コードで読み直せば復元できます。

UTF-16とUTF-8の違いは?CSVではどちらを使う?

UTF-16は日本語を2バイト固定で扱うため、Shift_JISからの移行で一時期使われました。しかしASCII部分まで2バイトになるためファイルが膨らむ欠点があります。Web・CSV・JSON・API連携では現在ほぼUTF-8一択で、特別な理由がなければUTF-8を選ぶべきです。

CSV以外(TSV・JSON)でも文字化けは起きる?

はい、文字コードが一致していなければ同じ現象が起きます。特にTSVはCSVと同様にExcelで開かれることが多く、文字コードの不一致で化けます。JSONは現代のアプリが生成する場合ほぼUTF-8固定ですが、古いシステムから出力されたJSONではShift_JISの場合もあります。

この記事で紹介したツール