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

nxagd54h  于 2023-01-01  发布在  Node.js
关注(0)|答案(6)|浏览(812)

如何在nodejs中获得字符串的字节长度?如果我有一个字符串,如下所示:äáöü,那么str.length将返回4。但是如何得到它,字符串有多少字节?

efzxgjgh

efzxgjgh1#

下面是一个例子:

str = 'äáöü';

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

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

缓冲区. byteLength(字符串,[编码])

hzbexzde

hzbexzde2#

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

9avjhtql3#

或者,可以使用TextEncoder

new TextEncoder().encode(str).length

相关question
假设它比较慢

3z6pesqy

3z6pesqy4#

如果你想具体编码,这里是iconv的例子

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

6g8kf2rb5#

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

gblwokeq6#

这取决于字符串的位置。
在JavaScript引擎中(至少在大多数情况下,包括Node.js和Chromium/Chrome使用的V8),字符串are encoded as UTF-16 internally。在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字符串的长度。

相关问题