サロゲートペア
当初2 byteの範囲で文字を表現していたUnicodeでは領域が足りなくなった
未使用の領域を使い、4 byteで文字を表現する手段が考案された。これをサロゲートペアという
上位サロゲート:0xD800 - 0xDBFF $ 2^{10}通り
下位サロゲート:0xDC00 - 0xDFFF $ 2^{10}通り
この結果、$ 2^{10} \times 2^{10} 通りの文字が追加できるようになった
従来では未使用の領域を使っているので互換性もある
エンコーディングした後の文字は5 文字(16進数)で表現する
例:U+1F469
最終的に4 byteに変換する
例
U+1D306 tetragram for centre (𝌆), can only be encoded in UTF-16 using two 16-bit code units: 0xD834 0xDF06.
This is called a surrogate pair. Note that a surrogate pair only represents a single character.
JavaScript’s internal character encoding: UCS-2 or UTF-16? · Mathias Bynens
問題点
エンディアンをしらないとデコードできない
UTF-8は8 bit符号化なので問題なし
参考
サロゲートペア入門:CodeZine(コードジン)
絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama|note
#文字コード