C# 上位サロゲート・下位サロゲートの求め方
「辻󠄀」という文字(しんにょうが1つ)は辻の異体字である
「辻󠄀」をUnicodeで表現すると「U+8FBBU+E0100」となる
「U+E0100」の部分がIVSで、異体字を表す文字列となっている
このIVSから「U+」を除いたものを上位サロゲート・下位サロゲートに変換する方法
//文字コードをセット ※頭に「0x」を付けて16進数であることを明示
var unicode = 0xE0100;
// 文字コードから0x10000を引く
unicode -= 0x10000;
// 文字コードを「0x400」で割る ※戻り値はdecimal型
decimal temp = unicode / 0x400;
// 整数値に変換 ※併せてint型にキャスト
var hightSur = (int)Math.Floor(temp); //Math.floor()で整数値に変換
// 「0xD800」を足した値が上位サロゲートの10進数
hightSur += 0xD800;
// 16進数の文字列に変換した上位サロゲート
var hightSur16 = hightSur.ToString("X");
// 文字コードから0x10000を引いた値を「0x400」で割った余り
var lowSur = unicode % 0x400;
// 余りに「0xDC00」を足した値が下位サロゲートの10進数
lowSur += 0xDC00;
// 16進数の文字列に変換した下位サロゲート
var lowSur16 = lowSur.ToString("X");