サロゲートペア(surrogate pair)とは、世界中のあらゆる文字を表現するためにUnicodeの符号領域を6万文字から100万文字に増量するための苦肉の策である。
Unicode 1.0で想定していた65,536文字では世界中のあらゆる文字を表現することが不可能であることが判明したため、Unicode 2.0で導入された。
「未使用の文字2つを組み合わせて1文字を表現することで、表現可能な文字数を増やす」という方式で、この2つペアで用いる文字を代用品(surrogate)に見立てたことから「サロゲートペア(代用対)」と呼ばれる。これらは新たに追加された領域であることから、OSのバージョンやフォントによって対応度合いが異なる。
なお、サロゲートペアは本来65536文字しか表せないUTF-16において1112064文字を無理やり符号化するための手法であるため、元から4294967296文字をそのまま符号化可能なUTF-32や、頑張れば2147483648文字を符号化可能なUTF-8ではサロゲートペアは用いられない[1]。
サロゲートペアに供用されるBMPのアドレス領域は下記の区間となっており、上位サロゲートと下位サロゲートからそれぞれ抽出したアドレスの組み合わせによって、1024 × 1024 = 1048576文字が収録可能となる(その一部は非文字として予約されており、実際に使用可能な文字数はこれより少ない)。これらはUnicode追加領域のコードポイントアドレス(U+10000 - U+10FFFF)と対応しており、相互に変換して利用される。
例えば先頭アドレスの組となる「U+D800 U+DC00」には線文字Bの一つである LINEAR B SYLLABLE B008 A[𐀀]が割当てられている。対応するコードポイントは同じく追加領域の先頭に位置する「U+10000」となる。
前述のような経緯から、日本語の難読漢字や異体字など、いわゆる「昔は変換で出せなかった文字」はこのサロゲートペアを用いて収録しているものが多い。下記はその一例。
各領域の一覧についてはUnicode#符号位置の一覧を参照。
UTF-16サロゲートペア(U+yyyy U+zzzz)とUnicode追加領域のアドレス値(U+xxxxx)には一定の数的対応関係があり、以下の式で表される(全て16進数表記)。
例えば「U+D860 U+DE77」というアドレスで指定される文字を調べる場合、
10000 + (D860 - D800) × 400 + (DE77- DC00)
= 10000 + 60×400 + 277
= 10000 + 18000 + 277
= 28277
となり、Unicode一覧表から「U+28277」を確認すると'𨉷(身へんに容)'と分かる。
Unicode拡張領域アドレスからサロゲートペアのアドレスを算出する事も可能で、次の式から求められる(%:左項を右項で割った剰余値を返す演算子)。
yyyy = (xxxxx - 10000) ÷ 400 + D800
zzzz = (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字の漢字を利用できるようになった。
掲示板
5 ななしのよっしん
2021/11/07(日) 08:38:59 ID: 7kHCqruzVb
>>4
私も1.で考えてます
追加面の文字を指して「サロゲートペア文字」と呼ぶこともあるので単語記事自体は残しておいたほうが良さそうな気もしますが、Unicode記事でフォローすれば足りますかね
6 ななしのよっしん
2021/11/07(日) 13:10:13 ID: Z0FpPbHF2L
>>5
この記事はリダイレクト化ではなく記事として残すということでしょうか。
それなら、2.もいいかなと思いますが、いかがでしょう。
7 ななしのよっしん
2021/11/09(火) 23:20:32 ID: Z0FpPbHF2L
>>5
とりあえず、2.の部分については統合の合意ができていると思うので、統合作業を行いました。
スレチですが、ハッキングの>>17で述べたことがASCIIでも起きたのでこの場を借りて通知させて頂きます。
急上昇ワード改
最終更新:2024/05/14(火) 07:00
最終更新:2024/05/14(火) 07:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。