取引先から送られてきたCSVを開いたら全部文字化けしている、「このファイルって結局UTF-8なの?Shift_JISなの?」と頭を抱えた—— そんな経験はないでしょうか。テキストファイルには「自分が何の文字コードか」という情報が 基本的に書かれていないため、調べるにはちょっとしたコツが要ります。 この記事では、文字化けのパターンからの推測に始まり、 ブラウザツール・VSCode・コマンドラインを使った文字コードの確認・判定手順を、 手軽な順に解説します。
そもそも文字コードはなぜわかりにくいのか
テキストファイルは文字を数値(バイト列)の並びとして保存しています。 どの数値がどの文字に対応するかを定めた対応表が「文字コード」です。 やっかいなのは、テキストファイルの中身には「自分が何の文字コードか」という情報が 原則として含まれていない点です(後述のBOMがある場合を除く)。
そのため、ファイルを開くアプリは「たぶんこの文字コードだろう」と推測して表示しています。 その推測が当たれば正しく読め、外れれば文字化けします。 日本語のテキストで登場する主な文字コードは次の3種類です。
| 文字コード | 日本語1文字のバイト数 | よく使われる場面 |
|---|---|---|
| UTF-8 | 3バイト | Web全般・macOS・Linux・モダンアプリ(事実上の世界標準) |
| Shift_JIS | 2バイト | Windows版Excel・古い業務システムが出力するCSV |
| EUC-JP | 2バイト | 古いLinuxサーバー・レガシーWebシステム |
文字化けのパターンから文字コードを推測する
ツールを使わなくても、化け方のパターンを覚えておくと、 ある程度は元の文字コードを推測できます。文字化けは「保存した文字コード」と 「読み込んだ文字コード」の組み合わせで決まった見た目になるからです。 代表的なパターンをまとめました。
| 化けた見た目の例 | 本当の文字コード | 読み込んだ文字コード |
|---|---|---|
縺ゅ>縺・(読めない漢字の羅列) | UTF-8 | Shift_JIS |
ニ・ス・ス(半角カナ+記号) | Shift_JIS | UTF-8 |
���(黒い菱形の「?」が連続) | UTF-8 / EUC-JP | 非対応の文字コード(置換文字に変換された) |
譁・ュ怜喧縺・ | UTF-8 | Shift_JIS |
覚えておくと便利な目印
「縺」「繧」「繝」のような普段まず使わない漢字が大量に並んでいたらUTF-8をShift_JISで読んだサインです。 逆に半角カナと記号が混ざった見た目はShift_JISをUTF-8で読んだサインと覚えておくと、当たりをつけやすくなります。
ブラウザツールで確認する(最も手軽)
推測ではなく確実に判定したいなら、専用ツールにかけるのが一番です。 インストール不要で最も手軽なのが、ぱんだツールズのブラウザツールです。 ファイルはサーバーに送信されず、すべてブラウザ内で処理が完結するため、 機密情報を含むファイルでも安心して使えます。
- 文字コード確認ツールを開く
- 調べたいテキストファイルやCSVをドロップ(またはテキストを貼り付け)する
- UTF-8・Shift_JIS・EUC-JPのどれかが自動で判定・表示される
- BOMの有無もあわせて確認できる
判定後にそのまま文字コードを変えたい場合は、テキストファイルならテキスト文字コード変換ツール、 CSVファイルなら区切り文字の扱いを保てるCSV文字コード変換ツールにそのまま進めます。
VSCodeで確認する(右下のステータスバー)
普段からエディタを使う人には、VSCode(Visual Studio Code)での確認が早くて確実です。 VSCodeは無料でWindows・macOS・Linuxすべてに対応しています。
- ファイルをVSCodeで開く
- 画面右下のステータスバーに、現在の文字コード名(例:「UTF-8」「Shift JIS」)が表示されている。これが判定結果
- 文字化けしている場合は、その表示をクリック →「エンコード付きで再度開く」を選び、候補の文字コードを1つずつ試す
- 化けずに正しく読めた文字コードが、そのファイルの本当の文字コード
注意
ステータスバーの表示は「VSCodeが推測した文字コード」です。 BOMがないファイルでは推測が外れることもあるため、表示どおりに開いて化けている場合は 「エンコード付きで再度開く」で別の文字コードを試してください。
コマンドラインで確認する
大量のファイルをまとめて調べたい、自動化したいという場合はコマンドラインが便利です。 用途に応じて3つのツールを使い分けます。
file コマンド(macOS / Linux 標準)
追加インストール不要で使える標準コマンドです。手軽ですが日本語の判定精度は高くなく、 UTF-8かASCIIかといった大まかな判別向きです。
file sample.csv
# 出力例: sample.csv: UTF-8 Unicode textnkf -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_JISPython 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文字コード変換ツールでそのまま行える