文字コードガイド

UTF-8とShift_JISの違いは?文字化け・CSV・選び方を比較

同じ日本語でも、UTF-8とShift_JISでは対応できる文字、バイト列、得意な利用環境が異なります。Web、ExcelのCSV、古い業務システムで迷わないための判断基準を整理します。

公開日: 読了目安: 10分対象: Web・CSV・データ連携
UTF-8の多言語Web環境とShift_JISの日本語業務システムを対比した編集図
新しいWebやデータ交換はUTF-8が基本です。一方、既存の日本語Windows環境や受け渡し仕様ではShift_JIS系が残っています。

最初に結論:新規はUTF-8、既存仕様があるときだけShift_JISを検討

UTF-8とShift_JISの違いを一言でまとめると、UTF-8は世界中の文字を扱うUnicode向けの現在の標準的な符号化方式、Shift_JISは日本語環境で長く使われてきた従来型の文字コードです。

  • 新しいWebサイト、API、JSON、国際化するデータは、原則としてUTF-8
  • 既存システムや取引先が「Shift_JIS」「SJIS」「Windows-31J」「CP932」を指定するCSVは、指定を確認して合わせる
  • 文字化けは、保存時と読込時の文字コードが一致しないと起きるため、見た目だけでなく入出力条件を確認する

ファイルを変換する前に原本を残し、絵文字・外字・記号がある場合は、変換後の欠落や置換も確認してください。

1. UTF-8とShift_JISの違いを比較表で確認

文字コードは、文字を保存・送信するためのバイト列へ対応付ける決まりです。UTF-8とShift_JISは、同じ画面上の文字を別のバイト列で表すため、受け取る側が異なる方式で読むと正しく復元できません。

比較項目UTF-8Shift_JIS系
位置付けUnicodeをバイト列にする符号化方式日本語向けの従来型エンコーディング
対応文字多言語、記号、絵文字など広い範囲日本語と英数字・記号が中心。表現できないUnicode文字がある
1文字の長さ1〜4バイト。ASCII文字は1バイト、一般的な日本語は多くが3バイト1〜2バイトが中心。ASCII文字は1バイト、一般的な日本語は多くが2バイト
主な用途Web、API、JSON、Linux、現代のアプリ間連携古いWindowsソフト、国内の既存業務システム、指定形式のCSV
新規採用基本の選択肢接続先の仕様で必要な場合に限定
注意点BOMの有無やソフト側の判定Windows-31Jとの違い、未対応文字、変換時の情報損失

WHATWG Encoding Standard は、UTF-8を新しいプロトコルや形式で使うべき符号化方式とし、Shift_JISをレガシーな日本語マルチバイトエンコーディングとして定義しています。したがって「日本語だけだからShift_JIS」と決めるのではなく、接続先の制約がなければUTF-8を選ぶのが安全です。

2. 同じ文字でもUTF-8とShift_JISではバイト列が違う

画面に表示される「A」「あ」「漢」が同じでも、ファイル内部の値は文字コードによって変わります。代表例を16進数で見ると違いが明確です。

文字UTF-8Shift_JIS確認ポイント
A4141ASCII範囲は同じ1バイト
E3 81 8282 A0日本語はバイト数も値も異なる
E6 BC A28A BF誤った方式で読むと文字化けする
絵文字多くの絵文字を表現可能通常は表現できない変換時に「?」や代替文字になる場合がある
同じ文書からUTF-8とShift_JISの異なるバイト列へ分岐する流れを示した編集図
文字そのものと保存時のバイト列は別です。読む側が同じ文字コードを使って初めて元の文字へ戻せます。

ファイルサイズだけを見れば、日本語中心の短いテキストではShift_JISの方が小さくなる場合があります。ただし、現代の通信では圧縮や互換性も関係するため、数バイトの差だけで採用方式を決めるべきではありません。

3. なぜUTF-8とShift_JISを間違えると文字化けするのか

文字化けは、UTF-8で保存したバイト列をShift_JISとして読む、またはその逆のように、書き込み側と読み込み側の前提がずれたときに起こります。たとえばUTF-8の「あ」は E3 81 82 ですが、Shift_JISの「あ」は 82 A0 です。読込方式を誤ると、別の文字の組み合わせとして解釈されたり、無効な並びとして代替文字に置き換えられたりします。

上書きする前に原本を保存: 文字化けした状態で保存し直すと、元のバイト列が失われて復元しにくくなります。まずコピーを作り、正しい文字コードを指定して開き直してください。

すでに文字化けした文字列を貼り付けて確認する場合は、当サイトの文字化け変換・復元ツールも使えます。ExcelでCSVを開く手順はExcel・CSVの文字化け直し方で詳しく説明しています。

4. Shift_JISとWindows-31J(CP932)は完全には同じでない

Windowsの日本語環境で「Shift_JIS」と呼ばれているデータが、実際にはWindows-31J(コードページ932、CP932)であることがあります。Windows-31JはShift_JIS系の拡張で、NEC選定IBM拡張文字やIBM拡張文字などを含みます。

この違いは、丸付き数字、ローマ数字、特殊な漢字、記号などを含むデータで問題になりやすい点です。また、波ダッシュなど一部記号は実装や変換表によって対応関係が問題になることがあります。「Shift_JISで保存」とだけ書かれた仕様では、次の点を確認してください。

  • 指定は厳密なShift_JISか、Windows-31J / CP932か
  • 送信側と受信側が同じ変換表を使うか
  • 対象データに外字・機種依存文字・絵文字が含まれないか
  • 変換できない文字をエラーにするか、代替文字へ置き換えるか

5. CSV・Excelではどちらを選ぶ?用途別の判断

CSVには文字コードを必ず宣言する共通の仕組みがないため、作成側と受取側の合意が重要です。「Excelで開くからShift_JIS」と固定せず、利用するExcelのバージョン、読み込み方法、連携先の仕様を確認します。

利用場面第一候補理由・確認事項
Webからダウンロードする新しいCSVUTF-8多言語や記号を保持しやすい。Excel向けにBOM付き指定が必要か確認
古いWindows業務ソフトへ取り込むCSV指定されたShift_JIS系「CP932」「Windows-31J」を含め、取込仕様を優先
Mac・Linux・Windows間で共有UTF-8OSをまたぐデータ交換に向く
絵文字・多言語名・特殊記号を含むUTF-8Shift_JISでは表現できない文字がある
取引先テンプレートへ提出相手の指定見本ファイル、改行コード、区切り文字、BOMも合わせる

ExcelでUTF-8のCSVを安全に開くには、ダブルクリックだけでなく「データ」からテキスト/CSVを取り込み、文字コード候補とプレビューを確認する方法が有効です。保存し直す場合も、出力形式に「CSV UTF-8」などがあるかを確認します。

6. UTF-8のBOMあり・なしは何が違う?

UTF-8のBOMは、ファイル先頭に置かれる EF BB BF という3バイトの印です。UTF-8にはバイト順の違いがないため、本来の「バイト順を示す」目的ではなく、UTF-8であることを判定する目印として使われます。

  • Web、プログラムのソース、JSON: 通常はBOMなしを選ぶ場面が多い
  • Excelで直接開くCSV: 環境によってはBOM付きUTF-8の方が判定されやすい
  • 外部システム連携: BOMをデータの一部として誤認する実装もあるため仕様を確認

「UTF-8なら必ずBOM付き」でも「BOMは常に不要」でもありません。受け取るソフトが何を期待しているかで判断します。

7. UTF-8とShift_JISを安全に変換する手順

  1. 原本をコピーする: 変換失敗時に戻せる状態を作ります。
  2. 現在の文字コードを確認する: エディタの表示、送信元の仕様、HTTPヘッダー、CSVの作成元を照合します。
  3. 出力先の指定を確認する: UTF-8かShift_JISだけでなく、BOM、Windows-31J、改行コード、区切り文字も確認します。
  4. 未対応文字を検査する: 絵文字、外字、丸付き数字、特殊記号、氏名の異体字を含むサンプルで試します。
  5. 変換後を受取側で開く: 変換ツールのプレビューだけで終えず、実際のExcelや連携システムで確認します。
  6. 往復テストを行う: 重要データはUTF-8→指定形式→UTF-8と戻し、文字が欠落していないか比較します。

文字コードそのものの基礎やUnicode・コードポイントを確認したい場合は、文字コード変換の解説も合わせて参照してください。

8. UTF-8とShift_JISのよくある質問

新しいWebサイト、API、データ交換では原則としてUTF-8を選びます。既存の業務システムや受け渡し仕様がShift_JISまたはWindows-31Jを指定している場合は、その仕様に合わせます。

CSVを想定と異なる文字コードで開くことが主な原因です。Excelのデータ取り込み機能でUTF-8を指定するか、相手側の仕様に合わせて保存形式を確認します。

完全に同じではありません。Windows-31JはWindowsで広く使われるShift_JIS系の拡張で、追加文字や一部の対応関係が異なります。変換時は実際の指定名まで確認します。

常に必要ではありません。Webや多くの開発用途ではBOMなしが一般的ですが、利用するソフトが文字コード判定にBOMを使う場合があります。受け渡し先の仕様を優先してください。

変換元のバイト列を正しくShift_JIS系として読めれば、多くの文字は保持できます。ただし外字や実装固有の文字、誤った変換で既に失われた文字は別途確認が必要です。変換前後の比較を行ってください。

まとめ

  • UTF-8はUnicodeを扱う現在の標準的な符号化方式で、新しいWebやデータ交換の第一候補
  • Shift_JISは日本語の既存Windows・業務システムで必要になることがある
  • Shift_JISとWindows-31J(CP932)は完全には同じではない
  • CSVでは文字コードに加え、BOM、改行、区切り文字、受取側の仕様まで確認する
  • 変換前に原本を残し、未対応文字と往復変換をテストする

参考情報

関連記事

Excel・CSVの文字化け直し方

UTF-8・Shift_JISを指定してCSVを開く具体的な手順を確認できます。

文字コード変換の基礎

Unicode、ASCII、コードポイント、16進数の関係を整理できます。

ASCIIコードとは?

UTF-8とShift_JISで共通するASCII範囲の基礎を確認できます。