知乎热榜 ( ) • 2024-04-20 11:11
Cat Chen的回答

UTF-16 因为历史原因而成了在定长编码之上又封装了一层变长编码的怪物。UTF-16 在设计时以为 16 位定长编码就能容得下所以的 Unicode 字符,等 Unicode 字符数超过 UTF-16 容量后这个问题在单个 UTF-16 字符内是无解的,于是又引入了用多个 UTF-16 字符代表单个 Unicode 字符的方案。既然 UTF-16 变得这么恶心了,同样是变长编码还不如用早就设计为变长编码的 UTF-8 呢。

不过 UTF-8 也取代不了 UTF-16,因为 JavaScript 的标准定死了它内部字符串必须使用 UTF-16。考虑到 JavaScript 的普遍存在,取代 JavaScript 是不可能的,因此完全取代 UTF-16 也是不可能的。