Unicodeの文字数を正しく数える
基本的には4つの数え方がある。
1つの書記素は複数のコードポイントになることがある。 UTF-8は1コードポイントが1~4バイトの可変長
UTF-16は1コードポイントが1~2ワード(2か4バイト)の可変長
UTF-16のサロゲートペアだと2ワードで1コードポイントになる。
UTF-16は1ワードで2バイト、UTF-32では1ワードで4バイトになる。
UTF-8は1~4バイトの可変長。
JavaScript でそれぞれ数える方法
いわゆる人間が目にする「文字」の単位であれば、「書記素」単位になる。
バックスペースキーで消える単位やカーソルキーの移動の単位になるが、これもやや不正確。
合字のようなものでは分解される可能性があるため。
単語に使われる文字をつなげる言語体系がある。この場合でも「つなげない」のが書記素になる。
देवनागरी
1単語として表記上つながっているが、書記素では5文字になる。
https://gyazo.com/867090f176094c06484a3b902367e73d