UTF-16の拡張方法
U+10000以上のコードポイントをUTF-16で表すときは、上位サロゲートと下位サロゲートという2つの16ビット値を組み合わせます。
😀
U+1F600UTF-16
D83D DE00文字数のずれ
プログラミング言語によっては、この2つを別々に数えるため、画面では1文字でも長さが2になることがあります。
途中で分割しない
サロゲートペアの間で文字列を切ると不正なデータになります。コードポイントや書記素単位で処理できるAPIを選びます。