如何在nodejs中获得字符串的字节长度?如果我有一个字符串,如下所示:äáöü,那么str.length将返回4。但是如何得到它,字符串有多少字节?
äáöü
efzxgjgh1#
下面是一个例子:
str = 'äáöü'; console.log(str + ": " + str.length + " characters, " + Buffer.byteLength(str, 'utf8') + " bytes"); // äáöü: 4 characters, 8 bytes
缓冲区. byteLength(字符串,[编码])
hzbexzde2#
function getBytes(string){ return Buffer.byteLength(string, 'utf8') }
9avjhtql3#
或者,可以使用TextEncoder
TextEncoder
new TextEncoder().encode(str).length
相关question假设它比较慢
3z6pesqy4#
如果你想具体编码,这里是iconv的例子
iconv
var iconv = require('iconv-lite'); var buf =iconv.encode('äáöü', 'utf8'); console.log(buf.length); // output: 8
6g8kf2rb5#
console.log(Buffer.from('example..').length)
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字符串的长度。
length
'😀'.length
(str.length * 2) + 2
6条答案
按热度按时间efzxgjgh1#
下面是一个例子:
缓冲区. byteLength(字符串,[编码])
hzbexzde2#
9avjhtql3#
或者,可以使用
TextEncoder
相关question
假设它比较慢
3z6pesqy4#
如果你想具体编码,这里是
iconv
的例子6g8kf2rb5#
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字符串的长度。