サロゲートペアとは

http://codezine.jp/article/detail/1592

サロゲートペア入門

 通常、Unicodeでは1文字あたり2バイトのデータ量を使います。2バイトですから65536通り(0x0000〜0xFFFF)のビットを表現できます。この約6万字で世界中の文字を表現しようというのがUnicodeの本来の思想でした。

 さらに、日本語の処理について言うと、全角・半角に関係なく1文字あたり2バイトのデータ量を使います("a"も"あ"も2バイト)。このため「文字数 × 2 = 使用バイト数」という関係が常に成り立っていて、使用バイト数を2で割れば文字数を簡単に導き出せました。これは文字列からループ文で1文字ずつ処理する場合など、何かと都合がいいことも多かったのです。

 ところが、近年、Unicodeに組み込みたいという文字の要望がいろいろと増えてきました。結果的に従来の2バイト(65536文字)では文字が足りない状況になってしまったのです。そこで、解決策としてサロゲートペアという方法が導入されました。これは、「1文字=2バイト」の基本は維持しつつ、一部の文字については「1文字=4バイト」にする方法です。

 具体的には、従来のUnicodeでは未使用のだった0xD800〜0xDBFF(1024通り)を「上位サロゲート」、0xDC00〜0xDFFF(1024通り)を「下位サロゲート」と規定し、「上位サロゲート+下位サロゲート」の4バイトで文字を表現する方法です。

 「上位サロゲート」も「下位サロゲート」も従来のUnicodeでは未使用の領域なので、以前のUnicodeの文字コードと重複することはありません。

 このサロゲートペアの導入により1024×1024=1048576字の領域が追加されることになりました。