Unicode をエンコードする方式は複数ありますが、現在主流なのは UTF‑8 と UTF‑16 のみです。 他は歴史的理由で生まれたもの、互換性のために存在するもの、実験的なものなどが混在しています。
UTF‑16 — Windows と内部処理で今も現役
特徴
- 2 バイト単位で文字を表す(ただし補助面は 4 バイト)
- エンディアンがある(UTF‑16LE / UTF‑16BE)
- BOM が必要になることがある
- Windows API の標準文字コード
ビット構造
- 基本多言語面(BMP) → 16bit
- 補助面(絵文字など) → サロゲートペアで 2×16bit = 32bit
長所
- 内部処理が高速(固定長に近い)
- Windows との相性が良い
- メモリ上での扱いが簡単
短所
- Web では重い(ASCII でも 2 バイト)
- エンディアン問題がある
- サロゲートペアが複雑
使われる場所
- Windows
- Java(内部表現)
- 一部のゲームエンジン
UTF‑32 — 最も単純だが最も重い
特徴
- 常に 4 バイト固定長
- エンディアンあり(UTF‑32LE / UTF‑32BE)
- BOM が必要になることがある
長所
- すべての文字が 1 コードポイント = 4 バイト
- サロゲートペアなし
- 計算が簡単(ランダムアクセスが容易)
短所
- とにかく重い(UTF‑8 の 4 倍以上)
- Web では絶対に使われない
使われる場所
- 一部の内部処理
- Unicode のテスト用途
- メモリが潤沢なシステム
CESU‑8 — UTF‑8 のようで UTF‑8 ではない
特徴
- UTF‑16 のサロゲートペアを そのまま UTF‑8 風にエンコードする方式
- UTF‑8 と互換性がない
- Java の内部処理で使われることがある
長所
- UTF‑16 と相互変換が簡単
短所
- 標準ではない
- UTF‑8 と混ざると壊れる
- Web では禁止
使われる場所
- Java の内部
- 一部の古いシステム
UTF‑7 — メール時代の遺物
特徴
- ASCII のみ許可されたメール環境で Unicode を送るために作られた
+を使って Unicode を表現する- セキュリティ上の問題が多い
長所
- ASCII しか通らない環境で Unicode を送れた
短所
- 脆弱性が多い
- 読みにくい
- 現代では不要
使われる場所
- ほぼ廃止
- 古いメールサーバーの互換性維持のみ
UTF‑1 — 初期の実験的エンコーディング
特徴
- Unicode 初期に提案された方式
- 可変長だが複雑で非効率
- UTF‑8 の登場で完全に消滅
長所
- ASCII と互換性があった
短所
- エンコードが複雑
- 読みにくい
- UTF‑8 の完全下位互換ではない
使われる場所
- 現在はゼロ
UTF‑EBCDIC — IBM メインフレーム向け
特徴
- EBCDIC ベースのシステムで Unicode を扱うための方式
- UTF‑8 と似ているが互換性なし
長所
- IBM メインフレームで Unicode を扱える
短所
- 一般用途では不要
- UTF‑8 と互換性がない
使われる場所
- IBM メインフレームのみ
UTF 形式の比較表
| 形式 | 可変長/固定長 | 使えるビット数 | 主な用途 | 長所 | 短所 |
|---|---|---|---|---|---|
| UTF‑8 | 可変長(1〜4B) | 7/11/16/21bit | Web、UNIX、ファイル | ASCII互換、軽い | 日本語は3Bで重め |
| UTF‑16 | 可変長(2 or 4B) | 16/21bit | Windows、Java | 内部処理が速い | エンディアン問題 |
| UTF‑32 | 固定長(4B) | 21bit | 内部処理、テスト | 単純明快 | 重すぎる |
| CESU‑8 | 可変長 | UTF‑16準拠 | Java内部 | UTF‑16と相性良い | 標準外 |
| UTF‑7 | 可変長 | 7bit中心 | 古いメール | ASCII環境で使えた | 脆弱性 |
| UTF‑1 | 可変長 | 複雑 | 初期実験 | 歴史的価値 | 完全に廃止 |
| UTF‑EBCDIC | 可変長 | EBCDIC準拠 | IBM | メインフレーム向け | 一般用途なし |
まとめ

- UTF には複数の形式があるが、現代で実用的なのは UTF‑8 と UTF‑16 のみ
- UTF‑32 は単純だが重すぎる
- CESU‑8 / UTF‑7 / UTF‑1 / UTF‑EBCDIC は特殊用途か歴史的遺物
- Web とプログラミングの世界では UTF‑8 が圧倒的標準
- Windows や Java の内部では UTF‑16 が現役

HR