Unicodeとは?コードポイントと文字コードの仕組みを解説

この記事の要点

文字のコードポイントをすぐ調べたい方へ

文字を入力するとU+表記、10進数、UTF-8、UTF-16を一覧表示できます。

Unicodeコード変換ツールを使う

Unicodeとは何か

Unicodeは、日本語、英語、漢字、記号、絵文字などをコンピュータで一貫して扱うための文字集合の規格です。環境ごとに異なる番号で文字を管理すると、送信側と受信側の対応がずれて文字化けが起こります。Unicodeは文字ごとに共通の番号を定め、この食い違いを減らします。

文字「あ」 → コードポイント U+3042文字「😀」 → コードポイント U+1F600

ここで重要なのは、Unicodeが「文字と番号の対応」を定め、UTF-8やUTF-16が「その番号をデータとして表す方法」を定めるという区別です。

ASCIIとUnicodeの関係

ASCIIは英字、数字、基本記号、制御文字を0〜127へ割り当てた文字コードです。Unicodeの先頭128コードポイントはASCIIと同じ割り当てになっています。

文字ASCII 10進数ASCII 16進数Unicode
A6541U+0041
a9761U+0061
04830U+0030
改行 LF100AU+000A

そのためASCIIだけで構成されたテキストは、UTF-8でも同じ1バイトの値になります。一方、ひらがなや漢字はASCIIの範囲外です。

コードポイントとU+表記

コードポイントはUnicodeの文字に割り当てられた整数です。通常はU+の後ろへ16進数を続けます。U+表記はバイト列ではなく、文字の識別番号です。

文字コードポイント10進数分類
AU+004165基本ラテン文字
U+304212354ひらがな
U+6F2228450CJK統合漢字
😀U+1F600128512絵文字

Unicodeの範囲と平面

Unicodeコードポイントの範囲はU+0000U+10FFFFで、65,536個ずつの17平面に分けられます。日常的に使う文字の多くは基本多言語面(BMP)にあり、範囲はU+0000〜U+FFFFです。

「1文字」とコードポイント数は同じとは限らない

画面上で1文字に見える単位と、コードポイント1個は必ずしも一致しません。たとえば「が」は単独のU+304Cでも、「か」U+304Bと結合濁点U+3099の2コードポイントでも表せます。

が = U+304Cが = U+304B U+3099

さらに、家族の絵文字や国旗は複数のコードポイントを組み合わせて1つの見た目を作ることがあります。文字数を数える処理では、コードポイント数だけでなく書記素クラスタも考慮する必要があります。

NFC・NFDによるUnicode正規化

見た目が同じでもコードポイント列が異なる文字列を、用途に応じた形へそろえる処理がUnicode正規化です。NFCは可能な文字を合成し、NFDは基底文字と結合文字へ分解します。

文字列比較の注意

画面上で同じ「が」に見えても、内部のコードポイント列が違えば単純比較で一致しない場合があります。検索、ファイル名、重複判定では正規化形式をそろえてください。

よくある質問

Unicodeとは簡単にいうと何ですか?

世界中の文字や記号へ一意のコードポイントを割り当て、異なる環境でも同じ文字を扱えるようにする文字集合の規格です。

U+3042とは何を表していますか?

ひらがなの「あ」に割り当てられたUnicodeコードポイントです。U+の後ろは16進数で、3042は10進数では12354です。

Unicodeの1文字は必ず1コードポイントですか?

必ずしもそうではありません。濁点などの結合文字や一部の絵文字は、複数のコードポイントを組み合わせて1つの文字のように表示されます。

ASCIIとUnicodeには互換性がありますか?

はい。UnicodeのU+0000〜U+007FはASCIIと同じ文字と値に対応しています。