Unicode 和 UTF-8 之间的关系
Unicode 是一种字符集合,现在可容纳 100 多万个字符。每个字符对应一个不同的 Unicode 编码,它只规定了符号的二进制代码,却没有规定这个二进制代码在计算机中如何编码传输。
UTF-8 是一种对 Unicode 的编码方式,它是一种变长的编码方式,可以用 1~4 个字节来表示一个字符。
补充:UTF-8 是目前 Web 上最常用的 Unicode 传输编码(UTF-16、UTF-32 也可表示 Unicode,但空间开销大)。它对不同范围的 Unicode 码点采用不同字节数编码:
- ASCII 范围内的字符(U+0000 ~ U+007F)用 1 个字节表示,与 ASCII 完全兼容。
- 拉丁文、希腊文等(U+0080 ~ U+07FF)用 2 个字节。
- BMP 平面内的常用字符(U+0800 ~ U+FFFF,如中文)用 3 个字节。
- 辅助平面字符(U+10000 ~ U+10FFFF,如 emoji)用 4 个字节。
这种变长方案的好处是英文文档体积小,又能容纳全球字符。JS 字符串在内存中使用 UTF-16 编码(每个码元 2 字节),而浏览器/网络传输默认使用 UTF-8。
// 在 Node 中查看字符串编码后的字节序列
const buf = Buffer.from('你好', 'utf8');
console.log(buf); // <Buffer e4 bd a0 e5 a5 bd> 6 字节
console.log(buf.length); // 6
来源整理自:vue3js.cn 面试官系列



