文章

JS 中编码相关的所有函数

全局函数

String 函数

说明

  • BMP(Basic Multilingual Plane)指的是 Unicode 编码中的基本多语言平面,包括 U+0000 到 U+FFFF 范围内的字符。注意length 属性始终是根据 BMP 进行计算,所以 '😀'.length 的值是 2,而不是 1
  • 代理对(Surrogate Pair)用于表示超出 BMP 范围的字符。代理对编码是通过两个 16 位的码元组合来表示一个字符,这两个码元被称为高位代理(high surrogate)和低位代理(low surrogate)。高位代理的范围是从 U+D800 到 U+DBFF,而低位代理的范围是从 U+DC00 到 U+DFFF。
  • 代码点(Code Point):指 Unicode 中的每个字符所对应的唯一数字标识。换句话说,代码点是字符在 Unicode 标准中的位置。
  • Unicode 是一种字符编码标准,旨在为世界上所有的字符提供一个唯一的编号,以便计算机能够正确地处理和显示各种语言和符号。

对字符进行规范 normalize。解决的是这么一种情况:某些 Unicode 字符可以有多种编码方式。有的字符可以使用 BMP 字符表示,也可以通过一个代理对表示。也就是说这些字符的形状是一样的,但他的实际编码却不一样,那么当我们使用等号接纳比对时,程序只会根据编码判断是否相等。下面是一个案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 上面带圆圈的大写拉丁字母 Å
const a1 = String.fromCharCode(0x00C5)
// 长度单位 “埃”
const a2 = String.fromCharCode(0x212B)
// U+0041 是大写大写拉丁字母 A
// U+030A 是上面加个圆圈
// 按照这种方式,你可以自己替换 0x0041 为其他,比如 0x0042 ... 0x007A 等等
const a3 = String.fromCharCode(0x0041, 0x030A)
console.log(String.fromCharCode(0x0042, 0x030A)) // B̊
console.log(String.fromCharCode(0x007A, 0x030A)) // z̊

console.log(a1) // Å
console.log(a2) // Å
console.log(a3) // Å
console.log(a1 === a2) // false
console.log(a2 === a3) // false

const a1Normalize = a1.normalize()
const a2Normalize = a2.normalize()
const a3Normalize = a3.normalize()
console.log(a1Normalize) // Å
console.log(a2Normalize) // Å
console.log(a3Normalize) // Å
console.log(a1Normalize === a2Normalize)
console.log(a2Normalize === a3Normalize)

Number 函数


本文由作者按照 CC BY 4.0 进行授权

© Linhieng. 保留部分权利。

本站由 Jekyll 生成,基于 Chirpy 主题进行修改。