我有一个 javascript 字符串,从服务器以 UTF-8 格式发送时大约为 500K。如何在 JavaScript 中判断它的大小?
我知道 JavaScript 使用 UCS-2,所以这是否意味着每个字符 2 个字节。但是,它是否取决于 JavaScript 实现?或者在页面编码或内容类型上?
我有一个 javascript 字符串,从服务器以 UTF-8 格式发送时大约为 500K。如何在 JavaScript 中判断它的大小?
我知道 JavaScript 使用 UCS-2,所以这是否意味着每个字符 2 个字节。但是,它是否取决于 JavaScript 实现?或者在页面编码或内容类型上?
您可以使用Blob获取以字节为单位的字符串大小。
例子:
console.info(
new Blob(['😂']).size, // 4
new Blob(['👍']).size, // 4
new Blob(['😂👍']).size, // 8
new Blob(['👍😂']).size, // 8
new Blob(['I\'m a string']).size, // 12
// from Premasagar correction of Lauri's answer for
// strings containing lone characters in the surrogate pair range:
// https://stackoverflow.com/a/39488643/6225838
new Blob([String.fromCharCode(55555)]).size, // 3
new Blob([String.fromCharCode(55555, 57000)]).size // 4 (not 6)
);
如果您使用的是 node.js,则使用buffers有一个更简单的解决方案:
function getBinarySize(string) {
return Buffer.byteLength(string, 'utf8');
}
有一个 npm 库:https : //www.npmjs.org/package/utf8-binary-cutter(忠实地来自你)
String
值不依赖于实现,根据ECMA-262 第 3 版规范,每个字符代表一个UTF-16 文本的 16 位单元:
4.3.16 字符串值
字符串值是 String 类型的成员,是零个或多个 16 位无符号整数值的有限有序序列。
注意 尽管每个值通常代表一个 UTF-16 文本的单个 16 位单元,但语言对这些值没有任何限制或要求,只是它们是 16 位无符号整数。
试试这个结合使用unescape js 函数:
const byteAmount = unescape(encodeURIComponent(yourString)).length
完整编码过程示例:
const s = "1 a ф № @ ®"; // length is 11
const s2 = encodeURIComponent(s); // length is 41
const s3 = unescape(s2); // length is 15 [1-1,a-1,ф-2,№-3,@-1,®-2]
const s4 = escape(s3); // length is 39
const s5 = decodeURIComponent(s4); // length is 11