⭐️Unicode・UTF-16・文字コードの関係性まとめ

1. Unicode(ユニコード)

文字に「番号」をつけた世界共通のリスト(辞書)のこと。 文字と番号のペア(コードポイント)を管理しているだけで、まだメモリの保存形式は決まっていない。

  • 【具体例】
    • アルファベットの q = 世界共通で 「113番」 と決まっている
    • 日本語の あ = 世界共通で 「12,345番」 と決まっている

2. UTF-16 / UTF-8(エンコード方式)

Unicodeの番号を、コンピューターのメモリ(0と1の箱)に保存するための「具体的な変換ルール」のこと。 ルールによって、箱をいくつ使うか(何ビットにするか)の切り分け方が変わる。

  • 【具体例:UTF-16というルールの場合】 「基本的には、最初から 16ビット(箱2つ分) を1セットとして、きれいに区切って保存しよう!」というルール。JavaScriptの内部処理はこれ。
  • 【具体例:UTF-8というルールの場合】 「英語みたいに小さい番号は 8ビット(箱1つ)、日本語みたいに大きい番号は 24ビット(箱3つ) のように、文字に応じて箱の数を変えて保存しよう!」というルール。Webサイトの通信などで主流。

3. UTF-16 文字コード

UTF-16というルールに従って、実際にメモリに保存された**「0と1の身代わりデータ(暗号データ)」**そのもののこと。 コンピューターは文字をそのまま扱えないため、このデータを文字の身代わり(コード)として処理する。これを人間に分かりやすい10進数に翻訳したものが、プログラムで目にする数字。

  • 【具体例:q(113番)をUTF-16で保存したとき】

    • 実際のデータ: 00000000 01110001 (16ビットの枠に収まった0と1の身代わりデータ)
    • 人間に見える数字に直すと: 113
    • ※TypeScriptの charCodeAt() が引っ張り出してくるのは、この変換された 113 という数字です。
  • 【具体例:あ(12,345番)をUTF-16で保存したとき】

    • 実際のデータ: 00110000 01000010 (16ビットの枠にピッタリ収まった0と1の身代わりデータ)
    • 人間に見える数字に直すと: 12345