js中字符串基本上表示为 UTF-16 码元 的序列。 在 UTF-16 编码中,每个码元都是 16 位长(2^16=16^4=65536
),也就是有65536种常见字符。该字符集称为基本多语言平面(BMP),包含最常见的字符,如拉丁字母、希腊字母、西里尔字母以及许多东亚字符。
码元:
码元是字符编码系统(例如 UTF-8 或 UTF-16)使用的基本组成部分。字符编码系统将一个 Unicode 码位编码为一个或者多个码元。
很多生僻字超出BMP范围,便会出现此种问题。
js
"𠮷".length // 2
"𠮷".split('') // ['\uD842', '\uDFB7']
"𠮷".length // 2
"𠮷".split('') // ['\uD842', '\uDFB7']
unicode和utf16的关系
Unicode 是一个字符集,它定义了世界上几乎所有字符的唯一标识符。
UTF-16 则是一种 Unicode 字符编码方式,它使用 16 位单元来表示 Unicode 字符。
UTF-16 是 Unicode 的一种实现方式,它可以对 Unicode 字符进行编码和解码。在 UTF-16 编码中,Unicode 编号小于或等于 0xFFFF(65535)的字符使用一个 16 位单元表示,而其他字符则需要使用两个 16 位单元来表示。
因此,UTF-16 可以用来表示 Unicode 字符集中的所有字符。