%82%A0 は何文字?URLの文字コードをパッと見で判別するコツ
結論:先頭バイトのパターンで9割わかる
URLに %82%A0 とか %E3%81%82 とか並んでいるのを見て「これ何の文字?」となった経験はないだろうか。
実は、先頭1〜2バイトのパターンを覚えるだけで、どの文字コードか即座に判別できる。
| 見えるパターン | 文字コード | 具体例(「あ」) |
|---|---|---|
%E3%81%82 のように %E + 2バイト | UTF-8 | %E3%81%82 |
%82%A0 のように %8 や %9 で始まる | Shift-JIS | %82%A0 |
%A4%A2 のように %A〜%F の高バイト2つ | EUC-JP | %A4%A2 |
%1B%24B が含まれる | ISO-2022-JP | %1B%24B%24%22%1B%28B |
UTF-8 の見分け方
特徴:日本語は必ず3バイト(%XX が3個セット)
UTF-8 で日本語1文字は 3バイト になる。パーセントエンコードすると %XX%XX%XX の3個セットが繰り返される。
あいう → %E3%81%82%E3%81%84%E3%81%86
~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~
あ(3byte) い(3byte) う(3byte)
決め手:先頭バイトが %E3〜%E9
日本語でよく使う文字(ひらがな・カタカナ・常用漢字)の先頭バイトは %E3〜%E9 の範囲に集中している。
| 文字種 | 先頭バイト | 例 |
|---|---|---|
| ひらがな | %E3%81〜%E3%82 | あ = %E3%81%82 |
| カタカナ | %E3%82〜%E3%83 | ア = %E3%82%A2 |
| 漢字(基本) | %E4〜%E9 | 日 = %E6%97%A5 |
判別のコツ:
%Eで始まるパーセントエンコードが3個並んでいたら、まず UTF-8。
Shift-JIS の見分け方
特徴:日本語は2バイト(%XX が2個セット)
Shift-JIS で日本語1文字は 2バイト。%XX%XX の2個セットになる。
あいう → %82%A0%82%A2%82%A4
~~~~~~ ~~~~~~ ~~~~~~
あ い う
決め手:先頭バイトが %82〜%9F または %E0〜%EF
Shift-JIS の日本語の先頭バイトは2つの範囲に分かれる。
| 文字種 | 先頭バイト | 例 |
|---|---|---|
| ひらがな | %82 | あ = %82%A0 |
| カタカナ | %83 | ア = %83%41 |
| 記号 | %81 | 。= %81%42 |
| 漢字(第1水準) | %88〜%9F | 亜 = %88%9F |
| 漢字(第2水準) | %E0〜%EF | — |
判別のコツ:
%82や%83が頻出し、2バイトごとに区切れるなら Shift-JIS。 Yahoo! JAPAN の検索クエリなど、大手サイトでも現役で使われている。
よく見かける実例
Yahoo! JAPAN 検索:
search.yahoo.co.jp/search?p=%93%FA%96%7B%8C%EA
~~~~~~ ~~~~~~ ~~~~~~
日 本 語
EUC-JP の見分け方
特徴:日本語は2バイト、どちらも %A1〜%FE の高バイト
EUC-JP も2バイトだが、Shift-JIS との違いは 両方のバイトが %A1 以上 であること。
あいう → %A4%A2%A4%A4%A4%A6
~~~~~~ ~~~~~~ ~~~~~~
あ い う
決め手:%A で始まるバイトが連続
| 文字種 | 先頭バイト | 例 |
|---|---|---|
| ひらがな | %A4 | あ = %A4%A2 |
| カタカナ | %A5 | ア = %A5%A2 |
| 漢字 | %B0〜%F4 | 亜 = %B0%A1 |
| 記号 | %A1〜%A2 | 。= %A1%A3 |
判別のコツ: 2バイトとも
%A〜%Fの範囲なら EUC-JP の可能性が高い。 古い Linux/Unix 系のWebサーバーや CGI で見かける。
Shift-JIS との見分けポイント
EUC-JP と Shift-JIS は同じ2バイトだが、バイト値の範囲が違う。
| 先頭バイト | 2番目のバイト | |
|---|---|---|
| Shift-JIS | %81〜%9F, %E0〜%EF | %40〜%FC(低バイトも含む) |
| EUC-JP | %A1〜%FE | %A1〜%FE(常に高バイト) |
最も簡単な判別法: 2番目のバイトが %4 や %5 など低い値を含むなら Shift-JIS。%A 以上ばかりなら EUC-JP。
ISO-2022-JP の見分け方
特徴:エスケープシーケンスが含まれる
ISO-2022-JP は他の文字コードとまったく異なり、エスケープシーケンス(%1B) で文字セットを切り替える方式。
あいう → %1B%24B%24%22%24%24%24%26%1B%28B
~~~~~~~ ←日本語モード開始
~~~~~~~ ←ASCIIモード復帰
決め手:%1B%24B と %1B%28B
| シーケンス | 意味 |
|---|---|
%1B%24B | JIS X 0208(日本語)モードに切り替え |
%1B%28B | ASCII モードに復帰 |
判別のコツ:
%1Bが見えたら ISO-2022-JP 確定。 主に日本語メール(RFC 2022)で使用される。現代のWebではほぼ見かけない。
実践:クイズ形式で判別してみる
以下のURLエンコードされた文字列、何の文字コードか?
Q1
%93%8C%8B%9E%93%73
答え
Shift-JIS(「東京都」)
先頭バイト %93, %8B, %93 が %81〜%9F の範囲 → Shift-JIS。
Q2
%C5%EC%B5%FE%C5%D4
答え
EUC-JP(「東京都」)
すべてのバイトが %A1〜%FE の範囲 → EUC-JP。
Q3
%E6%9D%B1%E4%BA%AC%E9%83%BD
答え
UTF-8(「東京都」)
%E6, %E4, %E9 で始まる3バイトセット → UTF-8。
Q4
%1B%24B%45%6C%35%7E%45%54%1B%28B
答え
ISO-2022-JP(「東京都」)
%1B%24B(エスケープシーケンス)→ ISO-2022-JP 確定。
早見表:バイトパターン一覧
| チェックポイント | 該当する文字コード |
|---|---|
%E3〜%E9 で始まる3バイトセット | UTF-8 |
%C2〜%C3 で始まる2バイトセット | UTF-8(ラテン文字) |
%82, %83 で始まる2バイトセット | Shift-JIS(かな) |
%88〜%9F で始まる2バイトセット | Shift-JIS(漢字) |
両バイトとも %A1〜%FE | EUC-JP |
%1B が含まれる | ISO-2022-JP |
%20〜%7E のみ(ASCII範囲) | 文字コード不問(ASCII共通) |
自動判別できないケースに注意
文字コードの判別は万能ではない。以下のケースでは誤判別が起きやすい。
- 短い文字列(1〜2文字): バイト数が少なすぎてパターンが確定しない
- ASCII文字のみ:
hello→helloはどの文字コードでも同一 - Shift-JIS と EUC-JP の一部漢字: バイト範囲が重なる領域がある
迷ったらURLエンコード/デコードツールの自動判別機能を使ってみてほしい。バイト列から文字コードを推定して、正しくデコードしてくれる。
まとめ
%E+ 3バイト → UTF-8%82〜%9F+ 2バイト → Shift-JIS- 両バイト
%A以上 → EUC-JP %1Bあり → ISO-2022-JP
これだけ覚えておけば、ログやURLを見たときに「どの文字コードか」を瞬時に判断できる。 デバッグや問い合わせ対応のスピードが確実に上がるはずだ。