文字の色々
"𠮷野家".length === 2から始まり、これがTwitterで話題になってたがこれどういう意味だっけ?と曖昧になってたので調べた。
grapheme(書記素)
図形としての見た目の文字の最小単位
コードポイント
全ての文字に割り当てられたユニークな数値。Unicode規格は21bitの整数値空間。
コードユニット
コードポイントをどう分割して扱うかの単位。UTF-8(1~3バイト),UTF-8mb4(1~4バイト),UTF16(2,4バイト),UTF32(4バイト固定)の数字の部分。
サロゲートペア
未使用の領域2つの組み合わせ(上位サロゲート1024 * 下位サロゲート1024)で1文字を表現することにすることで、擬似的に表現できる文字量を増やしたもの。Unicode(2バイト=65536文字)じゃ足りなかったので苦肉の策で生み出された。UTF-16でしか問題にならない。
UTF-16はなぜ扱いづらい?
2バイトか4バイトでしか扱えない。ある範囲はサロゲートペアとして扱わないといけない(1文字かと思いきや0.5文字に。ちゃんと処理しないと文字化けが...)。
UTF-8はASCIIみたいな文字は1バイトでそのまま表せるし絵文字みたいなUTF-16だと100%サロゲートペアになる文字も可変長だから表現できる。固定帳でいいならUTF-32のほうがマシ(1文字に4バイト使うの馬鹿らしいけど)。
参考