簡體   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