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

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

ファイルの文字コードを確認・判定する方法 — UTF-8かShift_JISか調べる手順

約5分

取引先から送られてきたCSVを開いたら全部文字化けしている、「このファイルって結局UTF-8なの?Shift_JISなの?」と頭を抱えた—— そんな経験はないでしょうか。テキストファイルには「自分が何の文字コードか」という情報が 基本的に書かれていないため、調べるにはちょっとしたコツが要ります。 この記事では、文字化けのパターンからの推測に始まり、 ブラウザツール・VSCode・コマンドラインを使った文字コードの確認・判定手順を、 手軽な順に解説します。

そもそも文字コードはなぜわかりにくいのか

テキストファイルは文字を数値(バイト列)の並びとして保存しています。 どの数値がどの文字に対応するかを定めた対応表が「文字コード」です。 やっかいなのは、テキストファイルの中身には「自分が何の文字コードか」という情報が 原則として含まれていない点です(後述のBOMがある場合を除く)。

そのため、ファイルを開くアプリは「たぶんこの文字コードだろう」と推測して表示しています。 その推測が当たれば正しく読め、外れれば文字化けします。 日本語のテキストで登場する主な文字コードは次の3種類です。

文字コード日本語1文字のバイト数よく使われる場面
UTF-83バイトWeb全般・macOS・Linux・モダンアプリ(事実上の世界標準)
Shift_JIS2バイトWindows版Excel・古い業務システムが出力するCSV
EUC-JP2バイト古いLinuxサーバー・レガシーWebシステム

文字化けのパターンから文字コードを推測する

ツールを使わなくても、化け方のパターンを覚えておくと、 ある程度は元の文字コードを推測できます。文字化けは「保存した文字コード」と 「読み込んだ文字コード」の組み合わせで決まった見た目になるからです。 代表的なパターンをまとめました。

化けた見た目の例本当の文字コード読み込んだ文字コード
縺ゅ>縺・(読めない漢字の羅列)UTF-8Shift_JIS
ニ・ス・ス(半角カナ+記号)Shift_JISUTF-8
���(黒い菱形の「?」が連続)UTF-8 / EUC-JP非対応の文字コード(置換文字に変換された)
譁・ュ怜喧縺・UTF-8Shift_JIS

覚えておくと便利な目印

「縺」「繧」「繝」のような普段まず使わない漢字が大量に並んでいたらUTF-8をShift_JISで読んだサインです。 逆に半角カナと記号が混ざった見た目はShift_JISをUTF-8で読んだサインと覚えておくと、当たりをつけやすくなります。

ブラウザツールで確認する(最も手軽)

推測ではなく確実に判定したいなら、専用ツールにかけるのが一番です。 インストール不要で最も手軽なのが、ぱんだツールズのブラウザツールです。 ファイルはサーバーに送信されず、すべてブラウザ内で処理が完結するため、 機密情報を含むファイルでも安心して使えます。

  1. 文字コード確認ツールを開く
  2. 調べたいテキストファイルやCSVをドロップ(またはテキストを貼り付け)する
  3. UTF-8・Shift_JIS・EUC-JPのどれかが自動で判定・表示される
  4. BOMの有無もあわせて確認できる

判定後にそのまま文字コードを変えたい場合は、テキストファイルならテキスト文字コード変換ツール、 CSVファイルなら区切り文字の扱いを保てるCSV文字コード変換ツールにそのまま進めます。

VSCodeで確認する(右下のステータスバー)

普段からエディタを使う人には、VSCode(Visual Studio Code)での確認が早くて確実です。 VSCodeは無料でWindows・macOS・Linuxすべてに対応しています。

  1. ファイルをVSCodeで開く
  2. 画面右下のステータスバーに、現在の文字コード名(例:「UTF-8」「Shift JIS」)が表示されている。これが判定結果
  3. 文字化けしている場合は、その表示をクリック →「エンコード付きで再度開く」を選び、候補の文字コードを1つずつ試す
  4. 化けずに正しく読めた文字コードが、そのファイルの本当の文字コード

注意

ステータスバーの表示は「VSCodeが推測した文字コード」です。 BOMがないファイルでは推測が外れることもあるため、表示どおりに開いて化けている場合は 「エンコード付きで再度開く」で別の文字コードを試してください。

コマンドラインで確認する

大量のファイルをまとめて調べたい、自動化したいという場合はコマンドラインが便利です。 用途に応じて3つのツールを使い分けます。

file コマンド(macOS / Linux 標準)

追加インストール不要で使える標準コマンドです。手軽ですが日本語の判定精度は高くなく、 UTF-8かASCIIかといった大まかな判別向きです。

file sample.csv
# 出力例: sample.csv: UTF-8 Unicode text

nkf -g(日本語特化・要インストール)

nkf(Network Kanji Filter)は日本語処理に特化したツールで、 Shift_JIS・EUC-JP・UTF-8の区別が得意です。-g(guess)オプションで判定結果だけを表示します。

# Mac: brew install nkf / Ubuntu: sudo apt install nkf
nkf -g sample.csv
# 出力例: Shift_JIS

Python chardet(信頼度つきで判定)

Pythonの chardet ライブラリは統計ベースで多言語に対応し、 判定結果に信頼度(confidence)のパーセンテージを返すのが特徴です。プログラムから扱いたいときに向きます。

# pip install chardet
python -c "import chardet; print(chardet.detect(open('sample.csv','rb').read()))"
# 出力例: {'encoding': 'SHIFT_JIS', 'confidence': 0.99, 'language': 'Japanese'}

WindowsのコマンドプロンプトにはこれらのツールがないためVSCodeか、nkf・Pythonの導入が現実的です。 PowerShellで先頭3バイトを見てBOMの有無だけ確認することもできます。

まとめ

  • テキストファイルには文字コードの情報が原則含まれず、各アプリが推測して開いているため、調べるにはコツがいる
  • 化け方のパターン(「縺ゅ>縺・」はUTF-8をShift_JISで読んだサインなど)で当たりをつけられる
  • 最も手軽なのは文字コード確認ツールでの自動判定(インストール不要・サーバー送信なし)
  • エディタ派はVSCode右下のステータスバーで確認、文字化け時は「エンコード付きで再度開く」で特定できる
  • 大量ファイルや自動化には file / nkf -g / Python chardet を用途に応じて使い分ける
  • 判定後の変換はテキスト文字コード変換ツールCSV文字コード変換ツールでそのまま行える

よくある質問

文字コードとは何ですか?

コンピュータは文字を数値(バイト列)として保存しています。どの数値がどの文字に対応するかを定めた「対応表」が文字コードです。たとえば「あ」はShift_JISでは2バイトの 0x82A0、UTF-8では3バイトの 0xE38182 と、文字コードごとに異なる数値で表現されます。日本語のテキストファイルではUTF-8・Shift_JIS・EUC-JPの3種類がよく登場し、保存したときの文字コードと読み込むアプリが想定する文字コードが食い違うと文字化けが発生します。

なぜ同じファイルでもアプリによって文字コードが違って見えるのですか?

テキストファイルには「自分が何の文字コードか」という情報が原則として埋め込まれていません(BOMがある場合を除く)。そのため各アプリは「たぶんこの文字コードだろう」と推測して開いています。Windows版のExcelやメモ帳は日本語環境ではShift_JISを優先しがちで、macOS・Linux・VSCodeはUTF-8を優先します。同じファイルでもアプリごとに推測の優先順位が違うため、あるアプリでは正しく読め、別のアプリでは文字化けする、という現象が起きます。

BOMとは何ですか?確認する方法はありますか?

BOM(Byte Order Mark)はファイルの先頭に置かれる不可視のマーカーです。UTF-8のBOMは EF BB BF の3バイトで、「このファイルはUTF-8です」という目印になります。BOMがあるとExcelは正しくUTF-8として読み込みますが、Python・Node.jsなど多くのプログラムはBOMを余計なデータとして扱うため処理時の不具合の原因になります。確認するにはバイナリエディタやコマンドラインで先頭3バイトを見るのが確実です。macOS/Linuxなら「head -c 3 ファイル名 | xxd」で先頭が ef bb bf なら BOM付きUTF-8です。VSCodeでは右下のステータスバーに「UTF-8 with BOM」と表示されます。

文字コード確認ツールはどうやって判定しているのですか?

ぱんだツールズの文字コード確認ツールは、ファイルのバイト列を解析して文字コードを推定します。具体的には、まず先頭のBOMの有無をチェックし、次にバイトの並びがそれぞれの文字コードのルール(UTF-8は特定のビットパターンで多バイト文字を表す、Shift_JISは1バイト目と2バイト目が決まった範囲に入る、など)に矛盾なく当てはまるかを検証します。複数の候補が残る場合は、日本語として自然なバイト出現頻度をもとに最も確からしいものを選びます。すべてブラウザ内(JavaScript)で処理するため、ファイルはサーバーに送信されません。

自動判定が外れることはありますか?

あります。文字コードの自動判定はあくまで「推測」なので、100%正確ではありません。特に外れやすいのは、ファイルが極端に短い場合(バイトが少なく統計的に判断できない)、半角英数字だけのファイル(UTF-8・Shift_JIS・ASCIIで同じバイト列になり区別できない)、複数の文字コードが混在している場合です。判定結果が怪しいときは、VSCodeで「エンコード付きで再度開く」を使って候補の文字コードを1つずつ試し、文字化けせず読める文字コードが正解だと確認するのが確実です。

file・nkf・chardet の違いは何ですか?

いずれもコマンドラインで文字コードを調べる手段ですが、得意分野が異なります。「file」コマンド(macOS/Linux標準)は手軽ですが、日本語の判定精度はそれほど高くなくUTF-8かASCIIかの大まかな判別に向きます。「nkf -g」は日本語処理に特化したツールで、Shift_JIS・EUC-JP・UTF-8の区別が得意です(要インストール)。Pythonの「chardet」ライブラリは統計ベースで多言語に対応し、判定結果に信頼度(confidence)のパーセンテージを返すのが特徴です。日本語ファイルを正確に判定したいなら nkf、プログラムから扱うなら chardet が便利です。

Windowsのコマンドプロンプトで文字コードを確認できますか?

Windows標準のコマンドプロンプト(cmd)には file コマンドのような判定機能がないため、追加ツールを使うのが現実的です。最も手軽なのはPowerShellで「Get-Content -Encoding Byte -TotalCount 3 ファイル名」を実行して先頭3バイトを確認しBOMの有無を見る方法です。本格的に判定するならWindows版のnkfを導入して「nkf -g ファイル名」を使うか、Python(chardet)を入れます。GUIで済ませたい場合は、VSCodeで開いて右下のステータスバーの文字コード表示を見るのが最も簡単です。

ファイルはサーバーに送信されますか?

いいえ、送信されません。ぱんだツールズの文字コード確認ツール・テキスト文字コード変換ツール・CSV文字コード変換ツールはすべてブラウザ内(JavaScript)で処理が完結します。ドロップしたファイルや入力したテキストはお使いの端末上だけで解析され、サーバーには一切アップロードされません。そのため、社内文書・顧客データ・個人情報を含むファイルでも安心して文字コードを確認できます。

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