HOME備忘帳

Unicodeがどんな風にUTF-8に割当てられているか

前提

Unicodeというコードは、特にコンピュータ用とは限りません。

Unicodeの「U+FFFF」というのは16進数なのでコンピュータ用かと思いがちですし、実際コンピュータで扱うことが多いですが、イコール(いわゆる)文字コードではありません。

UTF-8とは、Unicode文字をバイト列としてどう表現するか、という体系です。昨今のインターネットはUTF-8が使われていることが多いです。
UTF-16などは、Unicodeを別の方法で表現しています。Windowsの中はUTF-16らしいです。

[ ページ先頭へ ]

どのように割り当てられているか

Unicodeのどの範囲がUTF-8のどの範囲に割り当てられているか、の一覧は以下の通り。

unicode UTF-8
U+0000 ~ U+007F [00-7F] 1バイト、ASCIIコード互換
U+0080 ~ U+07FF [C2-DF][80-BF] 2バイト
U+0800 ~ U+FFFF
BMP(基本多言語面)はここまで
E0[A0-BF][80-BF]
[E1-EF][80-BF][80-BF]
3バイト
U+10000 ~ U+1FFFFF F0[90-BF][80-BF][80-BF]
[F1-F7][80-BF][80-BF][80-BF]
4バイト

先頭のバイトを確認して:

00-7Fだったら、1バイト文字。今思うと、なんとも贅沢な。

80-BFは2バイト目以降専用なので、先頭がこれだったらデータ壊れてます。

C0-C1は

C2-DFだったら2バイト文字。

E0-EFだったら3バイト文字。

F0-F7だったら4バイト文字。ついに4バイト、というか、Unicode自体も桁増えちゃってます。後付け感…。

U+200000以降を表現する、F8-FBで始まる5バイト、FC-FDで始まる6バイトの仕様もあるみたいですが、とりあえずそっとしておきます。

[ ページ先頭へ ]

Unicodeの雑学

元々は「U+16進数4桁」で、世界中の使いそうな文字を網羅するはずだったUnicode。現在、基本多言語面と言われているのは、この最初に決めた文字たちです。

基本多言語面は、UTF-8なら3バイトまでで、UTF-16ではサロゲートペア(2個イチで表現する方法)なしで表せます。

16ビットの枠内に全世界の文字を収録するという計画は早々に破綻し、1996年のUnicode 2.0の時点で既に、文字集合の空間を16ビットから広げることが決まった。

Unicode@wikipedia より引用

いまUnicodeのバージョンいくつだろうと公式サイトチェックしたら、2015年6月17日リリースの8.0.0、とのこと。

最終更新日:2016/04/09

[ ページ先頭へ ]