UTF-16にゃのサロゲートペア*2

UTF-16にゃのサロゲートの処理が間違ってたのですにゃ。

これにゃは、にゃんとかちゅ〜ぶにゃ方からもってきたコードにゃので、にゃんとかにゃ方も、間違ってますですにゃ。(汗)
文字コード……奥が深いですにゃね。

ユニコードにゃは、32bitあれば全部表現できるにゃのですにゃ。
でも、定義されてるにゃは、U+0000〜U+10FFFFにゃまで。
にゃので、20ビットにゃを10ビット2つにゃに分割して、UTF-16にゃにいれちゃえにゃ〜〜ってにゃのが、サロゲートペアにゃのですにゃ。
*1

U+0000〜U+FFFFまでにゃは、普通にゃに 2バイトでにゃってにゃ。
U+10000〜U+10FFFFにゃは、

UTF-32 UTF-16
0000 0000 000x xxxx yyyy yyzz zzzz zzzz 1101 10xx xxyy yyyyと1101 11zz zzzz zzzz

みたいにゃ感じにゃに分けるのですにゃ。
xxxxxにゃ部分にゃは、5bitにゃんだけど、1引いてあげるので、4ビットにゃににゃるのですにゃ。*2

UTF-16にゃで、1文字2バイトにゃ〜って感じで配列とか固定で書いてたプログラムにゃは、駄目ににゃってしまうわけですにゃね。

*1:これって可変長にゃににゃってしまって、Unicodeにゃを作ろう〜って時にゃの初心が……

*2:1〜0x10にゃので1引くと0〜0xFにゃににゃるのです。