繁体   English   中英

为什么 JavaScript 的字符串使用 UTF-16 而一个字符的实际大小可能只有一个字节?

[英]Why is that JavaScript's strings are using UTF-16 but one character's actual size can be just one byte?

根据这篇文章

在内部,JavaScript 源代码被视为 UTF-16 代码单元序列。

这个IBM 文档说

UTF-16 基于 16 位代码单元。 因此,每个字符可以是 16 位(2 个字节)或 32 位(4 个字节)。

但我在 Chrome 的控制台中测试,英文字母只占用 1 个字节,而不是 2 或 4 个字节。

new Blob(['a']).size === 1

我想知道为什么会这样? 我在这里错过了什么吗?

在内部,JavaScript 源代码被视为 UTF-16 代码单元序列。

请注意,这是指源代码,而不是字符串值。 字符串值在文章后面也被引用为 UTF-16:

当一个字符串包含实际的文本数据时,每个元素都被认为是一个 UTF-16 代码单元。

这里的差异实际上是在 Blob 构造函数中。 来自MDN

请注意,这里的字符串编码为 UTF-8,与通常的 JavaScript UTF-16 字符串不同。

UTF 具有不同的字符大小。

a的大小为 1 字节,但ą例如有 2

 console.log('a', new Blob(['a']).size) console.log('ą', new Blob(['ą']).size)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM