某些仅有一个字符的字符串,长度居然不为1?
'😂'.length // 2
'𠮷'.length // 2
'✝️'.length // 2
'9️⃣'.length // 3
'👨👩👧👦'.length // 11
代理对:码点超过0xFFFF的字符需要进行转换,以使用多个码点来保存这个字符 —— 因为UTF-16下,单独一个码点存不下这个字符。
Unicode 标准规定 U+D800...U+DFFF 的值不对应于任何字符,所以可以用来做标记。
https://juejin.cn/post/7025400771982131236
看起来增补平面可以表示(2**20)-1个字符;使用代理对表示,可以恰好覆盖增补平面所有字符
增补平面码点到代理对转换
H = Math.floor((C - 0x10000) / 0x400) + 0xD800
L = (C - 0x10000) % 0x400 + 0xDC00
代理对转换到增补平面码点
C = (H - 0xD800) * 0x400 + L - 0xDC00 + 0x10000
字符变形
'🈚︎'.split('').map(char => char.charCodeAt().toString(16))
// (3) ['d83c', 'de1a', 'fe0e']
'🈚️'.split('').map(char => char.charCodeAt().toString(16))
// (3) ['d83c', 'de1a', 'fe0f']
某些仅有一个字符的字符串,长度居然不为1?
代理对:码点超过0xFFFF的字符需要进行转换,以使用多个码点来保存这个字符 —— 因为UTF-16下,单独一个码点存不下这个字符。
看起来增补平面可以表示
(2**20)-1个字符;使用代理对表示,可以恰好覆盖增补平面所有字符增补平面码点到代理对转换
代理对转换到增补平面码点
字符变形