如何在nodejs中获取字符串长度(以字节为单位)?如果我有一个字符串,就像这样:
äáöü
,那么str.length将返回4。但如何获取这个字符串由多少个字节组成呢?äáöü
,那么str.length将返回4。但如何获取这个字符串由多少个字节组成呢?这里是一个例子:
str = 'äáöü';
console.log(str + ": " + str.length + " characters, " +
Buffer.byteLength(str, 'utf8') + " bytes");
// äáöü: 4 characters, 8 bytes
npm install filesize
- SGrfunction getBytes(string){
return Buffer.byteLength(string, 'utf8')
}
var byteLength = Buffer.byteLength
,它也会同样地工作。 - RReverserconsole.log(Buffer.from('example..').length)
这取决于字符串的位置。
在JavaScript引擎中(至少在大多数引擎中,包括Node.js和Chromium/Chrome使用的V8引擎),字符串在内部被编码为UTF-16。在UTF-16编码中,每个字符的长度为2或4个字节。任何主要人类语言(以及许多不常见的语言)中常见的每个字符都被编码为2个字节(一个代码单元),而来自罕见语言、表情符号和不寻常符号的字符通常被编码为4个字节(两个代码单元)。
此外,JavaScript字符串的length
属性实际上并不返回字符串中字符的数量,它返回代码单元的数量。例如,''.length
返回2,即使字符串只包含一个字符。
最后,字符串几乎肯定(尽管我没有检查过)是以null结尾的,因此需要额外增加2个字节。
综合起来,存储在您的Node.js脚本内存中的字符串的长度为(str.length * 2) + 2
字节。
另一方面,当您在HTTP请求中发送字符串或将其写入文件时,它通常会在传输到目标之前默认转换为UTF-8。 UTF-8中的字符可以是1、2、3或4个字节长(不包括“过长字符”的现象和潜在的未来扩展)。
对于此,除了其他答案显示如何计算UTF-8字符串长度外,我没有什么可补充的。
如果您想要进行特定编码,这里是iconv
的示例
var iconv = require('iconv-lite');
var buf =iconv.encode('äáöü', 'utf8');
console.log(buf.length);
// output: 8