UTF-8とShift_JISの違いは?CSVが文字化けする仕組みと対処

CSVを開いたら文字が「?」や「??」の羅列になっていた——その原因の多くは、UTF-8とShift_JISという2つの文字コードの取り違えです。仕組みを知れば、文字化けは未然に防ぐことができます。すでに化けてしまったファイルも、正しい手順で読み込み直すことが可能です。この記事では、2つの文字コードの特徴と使い分け、文字化けの直し方を順にご説明します。

文字コードとは?解析して確認できる数値と文字の対応表

コンピュータは内部のデータをすべて数値(0と1の列)として処理しています。そのため、文字コードという「どの数値をどの文字に割り当てるか」を定めた対応表が使われます。

エクセルを含むどんなソフトも、この対応表に沿って数値を文字として画面に表示します。対応表が一致しないまま読み書きすると、画面の文字が意味をなさない記号に化けます。

例えば「あ」という1文字はUTF-8ではE3 81 82という3バイトの数値に、Shift_JISでは82 A0という2バイトの数値に変換されます。書き出したときと読み込むときで対応表が一致しないと、文字化けが発生します。

文字コード 正式名称 特徴
UTF-8 Unicode Transformation Format - 8bit 世界中の文字を1つの規格で表現できる
Shift_JIS Shift Japanese Industrial Standards 日本語向けに設計された文字コード
EUC-JP Extended Unix Code for Japanese Unix/Linux環境で使われた日本語コード
ISO-2022-JP — 電子メールで使われる日本語コード

BOMが無いcsvファイルは文字コードの情報を持たないため、どの対応表で読むかは読み込む側が判断するしかありません。現在のWeb・業務システムで使われている文字コードは、主にUTF-8とShift_JISの2つです。

UTF-8とShift_JISの違いは環境依存文字に出る

比較の観点 UTF-8 Shift_JIS
対応文字数 約14万文字(世界中の文字) 約7,000文字(日本語中心)
日本語1文字のサイズ 3バイト 2バイト
英数字1文字のサイズ 1バイト 1バイト
Webサイトでの採用状況 大多数を占める ごく少数
Windowsのエクセル BOM付きなら正しく読み込むことができる 標準で読み込むことができる
Mac / Linux 標準で対応している 変換が必要なケースがある
プログラミング言語 標準で対応している レガシー対応向け

UTF-8はUnicodeを実装した文字コードで、日本語・英語だけでなく絵文字や中国語・韓国語まで、世界中の文字を1つの規格で表現できます。現在はWebサイトの大多数がUTF-8を採用しており、UTF-8は事実上の標準となっています。

日本語1文字は3バイトになるため、日本語の多いファイルはShift_JISよりサイズが大きくなります。それでもUTF-8なら、多言語が混在するデータも問題なく処理できます。

Shift_JISはマイクロソフトとアスキーが日本語処理向けに策定した文字コードで、Windowsのエクセルや勤怠管理・会計ソフトなど旧来の業務システムで今も使われています。Windowsで単に「Shift_JIS」と呼ばれるものは、実際にはCP932であることがほとんどです。

日本語を2バイトで表現するぶん、ファイルはコンパクトになります。ただし、「①②③」「髙」「﨑」のような環境依存文字はShift_JIS(JIS X 0208)の範囲外にあり、環境によって正しく処理できない場合があります。

csvの文字化けはエクセルの読み込み方しだいで生じる

文字化けは書き出し側と読み込み側で「数値→文字」の対応表が一致しないときに発生します。例えばUTF-8で保存した「あ」(E3 81 82)をShift_JISの対応表で開くと、別の文字(または存在しない組み合わせ)として解釈され、画面には「?」や記号が表示されます。そもそもcsvはファイルに文字コードの情報を持たないため、読む側がどちらの対応表を使うかを判断(または指定)しなければなりません。

もっとも多いのは、UTF-8(BOMなし)で保存したcsvファイルをエクセルでダブルクリックして開くケースです。エクセルはBOMが無いとShift_JIS(CP932)として読み込むため、日本語部分が丸ごと文字化けします。反対に、Shift_JISで保存したcsvをPythonなどUTF-8前提のプログラムで読み込んだ場合も、同じ理由で文字化けが発生します。

BOMとは?utf-8の文字コード変換で有無を選ぶ目印

BOM(バイトオーダーマーク)は、ファイル先頭に付く数バイトの識別子で、そのファイルがどの文字コードで書かれているかをソフトウェアへ伝えます。そのため、UTF-8のBOMであるEF BB BFの3バイトがあると、エクセルはUTF-8として読み込みます。

種類 先頭バイト エクセルでの動作
UTF-8(BOMなし) なし Shift_JISとして読み込み→文字化け
UTF-8(BOM付き) EF BB BF UTF-8として正しく読み込み
Shift_JIS なし そのまま正しく読み込み

エクセルでcsvを直接開く前提なら、「BOM付きUTF-8」か「Shift_JIS」のどちらかを選ぶと文字化けを避けられます。なお、Shift_JISのcsvにBOMを追加すると、エクセルはファイル全体をUTF-8として読み込むため、日本語部分が文字化けします。

BOM付きUTF-8は、保存時に文字コードを選ぶことができるテキストエディタや表計算ソフトで手軽に作ることができます。BOMを想定していないシステムやプログラムへ提供するときだけ、BOMを削除しておくと安全です。sakuttoAIのCSV文字コード変換ツールなら、BOM付き・BOMなしを指定して、ブラウザ内だけで変換できます。

取引先に合わせてShift_JISとutf-8を選ぶ

Windowsのエクセルでcsvを直接開く運用なら、変換先にShift_JISを選ぶといいでしょう。具体的には次のようなケースです。

  • Windowsのエクセルでcsvを直接開きたい場合
  • 社内の業務システム(勤怠管理・会計ソフト等)がShift_JIS指定の場合
  • 取引先からShift_JISでの提出を求められた場合

UTF-8を選ぶのは次のようなケースです。エクセル以外で使うデータなら、変換せずUTF-8のままで問題ありません。

  • Webサービスへアップロードする場合
  • Python・JavaScriptなどのプログラムで処理する場合
  • 中国語・韓国語など多言語データを含む場合
  • GoogleスプレッドシートやMacのNumbersで開く場合

UTF-8は表現できる文字の範囲が広いため、新しくcsvを作るならUTF-8を基本にするのが無難です。Shift_JISが必要なときだけ、ツールで変換しましょう。

Shift_JIS→UTF-8の変換でデータが欠けることは基本的にありません。UTF-8→Shift_JISでは一部の文字が変換できない場合があるため、元のデータをUTF-8で持っておけば、文字が欠ける心配があるのはShift_JISへ書き出すときだけです。

csvの文字化けの直し方はデータタブから読み込み直すこと

ファイルをダブルクリックで開くと、エクセルは文字コードを指定する画面を出さずにデフォルトの判定で読み込んでしまいます。そのため、エクセルで文字化けを避けるには「データ」タブの「テキストまたはCSVから」(バージョンによっては「外部データの取り込み」)で読み込みます。取り込み画面で、ファイルの文字コードに合わせてUTF-8かShift_JISを選びましょう。

正しい文字コードを選択するだけで、同じファイルでも正常に表示されます。改行コードの違いで行が崩れる場合も、同じ取り込み画面で調整できることがあります。

インポート操作をファイルごとに繰り返すのが手間な場合は、文字コードそのものをあらかじめ変換しておく方法もあります。sakuttoAIのCSV文字コード変換ツールなら、ファイルをサーバーへ送信せず、ブラウザ内だけでUTF-8とShift_JISを相互に変換できます。社外に出せないデータでも使うことができ、BOMの付与・除去も同時に指定可能です。

UTF-8を基本にShift_JISは必要なときだけ変換

UTF-8は世界標準で対応範囲が広く、Shift_JISは今もWindowsのエクセルや旧来の業務システムと相性が良い日本語向けの文字コードです。csvの文字化けは、数値と文字の対応表が書き出し側と読み込み側で一致しないことが原因で発生します。

BOMの有無もエクセルでの読み込み結果を左右するので、用途に合う文字コードを選んでおくといいでしょう。文字化けしたときは、取り込み時に文字コードを指定し直すか、変換ツールで変換し直します。

FAQ

結局どちらを使えばよいですか?
基本はUTF-8を推奨します。WindowsのExcelでCSVを直接開く場合は、Shift_JISの方が確実です。sakuttoAIのCSV文字コード変換ツールを使えば、いつでもUTF-8⇔Shift_JISを相互変換できます。
CSVの文字コードを確認する方法はありますか?
Windowsならメモ帳でファイルを開くと、画面右下に「UTF-8」や「ANSI(= Shift_JIS)」と表示されます。Macではターミナルで、fileコマンドに-Iオプションを追加して実行すると確認できます。sakuttoAIのCSVビューアでも自動判定できます。
UTF-8のBOM付きとBOMなしの違いは何ですか?
BOM(Byte Order Mark)は、ファイル先頭の3バイト(EF BB BF)の目印です。WindowsのExcelはBOMを見てUTF-8と判定するため、BOM付きなら直接開いても文字化けしません。プログラムで処理する場合は、BOMなしにしておくと安全です。
Shift_JISとCP932は同じものですか?
厳密には異なります。CP932はマイクロソフトがShift_JISを拡張した文字コードで、「①②③」「Ⅰ Ⅱ Ⅲ」などの記号が追加されています。Windowsで「Shift_JIS」と呼ばれるものは、実際にはCP932であることがほとんどです。
文字コード変換でデータが壊れることはありますか?
Shift_JISからUTF-8への変換では、データが欠けることは基本的にありません。逆にUTF-8からShift_JISへ変換する場合、Shift_JISで表現できない文字(絵文字や一部の漢字)は「?」に置換される可能性があります。sakuttoAIのCSV文字コード変換ツールはブラウザ内で処理されるため、ファイルがサーバーに送信されることはありません。