サロゲートペア(surrogate pair)とは、Unicodeで符号化に用いられる手法の一つである。
サロゲートは代用品の意で、基本多言語平面(Basic Multilingual Plane; BMP)中の未割当領域にある符号アドレス2つを一対としてその埒外にある符号アドレスを指定するためにそう呼ばれている。
サロゲートペアはBMPそのままでは収容し切れない各国の文字(漢字およびハングルが大分を占める)を追加するためにUnicodeに導入された。これらはUnicodeの追加領域(Supplementary Plane; SP)のアドレス※と対応しており、相互に変換して利用する。
※BMP上のアドレスは全て4ヘキサデシマル値(以下qrt)で表されるので2バイトで事足りるが、SP上のアドレスは5qrt以上で表されるため4バイト必要になる。
サロゲートペアをサポートしていないフォントではこれを利用した文字は表示できない。またOSのバージョンによってサロゲートペアへの対応度合が異なる。
サロゲートペアに供用されるBMPのアドレス領域は下記の区間となっている。
U+D800 - U+DBFF: 上位サロゲート(high surrogates)
U+DC00 - U+DFFF: 下位サロゲート(low surrogates)
これら2つの区間からそれぞれ抽出したアドレスの組合わせによって最大で約100万パターン{10242}を収録可能となる。
例えば先頭アドレスの組となるD800DC00には線文字Bの一つである LINEAR B SYLLABLE B008 A[𐀀]が割当てられている。
日本語の難読漢字もこのサロゲートペアを用いて収録しているものがあり、𩸽ほっけ[D867DE3D](表示できない環境の方向けに部首で文字解説すると、「魚」へんに「花」)、𩹉とびうお[D867DE49](「魚」へんに「飛」)などがここに収められている。
《BMP[Plane 0]の内訳》
| Scripts&Characters | High surrogates | Low surrogates | Private use | Scripts&Characters | |
| Codespace[U+] | 0000 - D7FF | D800 - DBFF | DC00 - DFFF | E000 - F8FF | F9FF - FFFF |
Unicode追加領域はU+10000〜U+10FFFFまでが確保されており、これらを16平面に分割して各用途に割り当てている。
第1平面[U+10000 - U+1FFFF]は追加多言語平面(Supplementary Multilingual Plane)という名称で、古代文字や記号・図柄類などが含まれる(携帯電話用の絵文字もここに収録)。
第2平面[U+20000 - U+2FFFF]は追加漢字平面(Supplementary Ideographic Plane)と呼ばれる漢字専用領域になっており、前項に挙げた𩸽(魚へんに花)[U+29E15]や𩹉(魚へんに飛)[U+29E49]もこの区間に収録されている。
第3平面 [U+30000 - U+3FFFF]は第三漢字平面(Tertiary Ideographic Plane)で、古代漢字や甲骨文字などが収録される予定。
第4平面〜第13平面[U+40000 - U+DFFFF]は未使用領域。
第14平面 [U+E0000 - U+EFFFF ]は追加特殊用途平面(Supplementary Special-purpose Plane)で制御コード専用領域になっている。
第15平面・第16平面[U+F0000 - U+10FFFF]は私用面。
なお第0平面[U+0000 - U+FFFF]に相当するのがBMPである。
《コードスペース対応表》
| BP(BMP) | SP(SMP, SIP, TIP, unassigned, SSP, private use) | |
| Plane number [0 - 16] | Plane 0 | Plane 1 - Plane 16 |
| Codespace [U+] | 0000 - FFFF | 10000 - 10FFFF |
◆UTF-16サロゲートペアとUnicode追加領域のアドレス値には一定の数的対応関係があり、以下の式で表される{全て16進数表記}。
XXXXX= 10000 + (DYYY - D800) × 400 + (DZZZ - DC00)
XXXXX: Unicode拡張領域アドレス
DYYY: 上位サロゲートアドレス
DZZZ: 下位サロゲートアドレス
例えばD860DE77を右辺に代入すると
10000 + (D860 - D800) × 400 + (DE77- DC00) = 10000 + 60×400 + 277 = 10000 + 18000 + 277 = 28277
XXXXX=28277となり、D860DE77⇔U+28277でUnicode一覧表からこれは'𨉷(身へんに容)'と分かる。
◆Unicode拡張領域アドレスからサロゲートペアのアドレスを算出する事も可能で、次の式から求められる。
DYYY= (XXXXX - 10000) ÷ 400 + D800
DZZZ= (XXXXX - 10000) % 400 + DC00
%:左項を右項で割った剰余値を返す演算子
WindowsがUnicodeに対応したのは98およびNT 4.0からだがこの時点ではまだUnicode自体が普及しておらず、IME標準辞書もUnicodeにしか収録されていない文字を殆ど扱っていなかったため身近ではなかった。続くWindows2000から新たに導入された機能では追加領域の基本的な入出力およびソーティングをサポートしていたが全てのシステムコンポーネントが追加領域に適応していた訳ではなかった。Windows XPになっても標準ではサロゲートペアに対応しておらず、パッチを当てる事で一部の字に対応していた。
Windows VistaではJIS2004に対応したことでUnicodeで使用できる日本語漢字が増したが、この補填した漢字の約三分の一が追加領域を参照しなければならない文字であったため、これらの文字を表示する際はサロゲートペアを利用する(一覧はこちらを参照)。
Windows 8からはサロゲートペアを活用した異体字セレクタであるIVS(Ideographic Variation Selector) に対応したことでそれまでは外字を参照していた約58,000字の漢字を利用できるようになった。
急上昇ワード改
最終更新:2025/12/12(金) 16:00
最終更新:2025/12/12(金) 16:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。