...これらの文字を特定するために一意な番号で表した文字集合を符号化文字集合という。Aは33、Bは34のように。(番号は適当)このA⇔33のような対応を文字コードといい、一意な番号のことをコードポイントという。UnicodeUnicodeは今世界中で使われている13万を超える様々な文字を集約した符号化文字集合をもつ規格。Unicodeの特徴は、13万を超える豊富な符号化文字集合テキストに左からの横書きと右からの横書きを混在させる双方向アルゴリズムや文字列同士を比較するアルゴリズムなどをもつ非常に大きな規格になっている。13万の文字集合には、一つ一つにUnicodeスカラ値(コードポイント)と呼ばれる番号が振られている。Unicodeスカラ値U+を付けた4ケタから6ケタの16進数で、U+3042のように表される。エンコーディングUnicodeスカラ値など符号化文字集合に使われている文字を一意に特定するためのものをコードポイントと言った。このコードポイントを様々なバイト形式で符号化することを、文字符号化方式またはエンコーディングという。(UTF-8やShift_JIS、EUC-JPなど)バイトここで一旦バイトやビット組み合わせについて軽く解説を挟む。知っている人は飛ばしてください。bit)とバイト(byte)という単位で扱われる。ビットは、コンピュータ内部における情報表現の最小単位である。1ビットでは0または1が格納され、表現数は2である。4ビットの表現数は、24=16だ。1バイトは、8ビットの集合体のこと。表現数は、28=256。A~Fの16文字で表現する文字。(10進数は1ケタを0~9の10文字で表現する私たちがいつも使っている表現方法)1バイトは、以下のような2ケタの16進数(256通り)で表されることが多い。0xE3」のようなバイト列で表現したものをバイト形式という。UTF-16Unicodeをファイルやメモリ上で表現するためのエンコーディング。UTF-8Unicodeの1文字を1~4バイトの可変長で表現する方法。0x80~0xBFU+0000~U+007Fが0x00~0x7FになっているのはASCII*1と互換性を持たせるため。UTF-16Unicodeのエンコーディングの1つで、1文字を16ビット(2バイト)または32ビット(4バイト)で表す。デコードサイトで文字列をUTF-8とUTF-16に変換してみる。U+D83DU+DE0EPRESSはASCIIなので、コードポイントが同じ😎はUTF-16では2つの16bitで表されているこの2つの16bitで1つの文字を表現する方法をサロゲートペアという。サロゲートペアUnicodeのコードポイント(Unicodeスカラ値)は16bitで、16進数で書くと4ケタになることはすでに話した通り。(U+0000)16bitでは表現数は、216=65536。6万5536文字しか表現することができない。漢字は8万字程度をUnicodeの符号化文字集合に収録したいので、16進数4ケタ(16bit)では表現しきれなくなった。Unicodeでは16進数5ケタの20bitをそのまま扱えないらしいので、16bitを2つ組み合わせることによって表現することになった。0xDC0Bという組み合わせに処理される。このように、16進数4ケタに収まり切らなかったコードポイントを2つの16進数4ケタの組み合わせをサロゲートペアという。まとめ絵文字の仕組みについては次の記事に書きます。64ページ*1:英数字、制御コードやいくつかの記号に対し、7ビットで0x00~0x7Fまでのビット組み合わせを与えた規格。PRESSブログエンジニアとして働き始める。Co.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。