如何在nodejs中获取字符串的字节数长度?

75
如何在nodejs中获取字符串长度(以字节为单位)?如果我有一个字符串,就像这样:äáöü,那么str.length将返回4。但如何获取这个字符串由多少个字节组成呢?

3
一个字符串在字节上没有长度。这取决于所使用的编码。 - usr
6个回答

156

这里是一个例子:

str = 'äáöü';

console.log(str + ": " + str.length + " characters, " +
  Buffer.byteLength(str, 'utf8') + " bytes");

// äáöü: 4 characters, 8 bytes

Buffer.byteLength(string, [encoding])


1
有没有一种自动获取KB、MB等(人类可读大小)的方法? - chovy
4
chovy,npm install filesize - SGr

11
function getBytes(string){
  return Buffer.byteLength(string, 'utf8')
}

17
这只是已被接受的答案的副本,放入了一个函数中。 - JohnnyHK
1
Buffer.byteLength已经是一个这样的函数了,而上面的示例至少展示了它的用法。有同样的运气,你可以做 var byteLength = Buffer.byteLength,它也会同样地工作。 - RReverser
2
最简单且最好的答案 - Intervalia

2

另外,您可以使用TextEncoder

new TextEncoder().encode(str).length

相关问题请参考

尽管速度较慢,但仍需假设


1
console.log(Buffer.from('example..').length)

1

这取决于字符串的位置。

在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字符串长度外,我没有什么可补充的。


0

如果您想要进行特定编码,这里是iconv的示例

  var iconv = require('iconv-lite');
  var buf =iconv.encode('äáöü', 'utf8');
  console.log(buf.length);
  // output: 8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接