Surrogate Pair
サロゲートペアは、補助平面のコードポイント(U+10000~U+10FFFF)を 2 個の 16 ビットコードユニットで表す UTF-16 の仕組みである。
目的
UTF-16 が BMP 以外の Unicode 全体を 16 ビットコードユニットでカバーしつつ、BMP 文字は 1 ユニットの効率を保てるようにする。
メカニズム
補助コードポイント C から 0x10000 を引くと 0~0xFFFFF の 20 ビット値が得られる。上位 10 ビット+0xD800 が上位サロゲート(0xD800-0xDBFF)、下位 10 ビット+0xDC00 が下位サロゲート(0xDC00-0xDFFF)である。復号は逆の計算を行う。
ユースケース
- Emoji 文字列の扱い(例:😀 = U+1F600)
- JavaScript の文字列の長さと繰り返し
- Windows API でのワイド文字処理
- 古代文字や希少文字のレンダリング
例
- 入力
😀Output\uD83D\uDE00High surrogate D83D plus low surrogate DE00
よくあるエラー
- Splitting a surrogate pair by truncating mid-pair, creating lone surrogates
- Iterate code points with for...of or Array.from
関連用語
UTF-16
UTF-16はUnicodeの可変長符号化形式で、符号位置あたり2バイトまたは4バイトを使用する。BMPの文字は1つの16ビット符号単位、追加面の文字はサロゲートペア(2単位)で表する。 用語集
Unicode
Unicode は国際的な文字符号化標準で、世界中のほぼすべての文字体系の各文字に一意の符号位置(U+0000〜U+10FFFF)を割り当てる。符号空間は 1,114,112 点である。 用語集
Code Point
符号位置(コードポイント)とは、Unicode 標準が各文字に割り当てる数値(U+0000 〜 U+10FFFF)であり、符号空間におけるその文字の位置番号である。 用語集
BOM
BOM(バイトオーダーマーク)は Unicode 文字 U+FEFF であり、テキストストリームの先頭に置いて符号化形式とバイト順を示す。 用語集