Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器缓冲区到字符串的转换在浏览器和节点中不相同_Javascript_Node.js_String_Utf 8 - Fatal编程技术网

Javascript 浏览器缓冲区到字符串的转换在浏览器和节点中不相同

Javascript 浏览器缓冲区到字符串的转换在浏览器和节点中不相同,javascript,node.js,string,utf-8,Javascript,Node.js,String,Utf 8,我遇到了一个有趣的问题。 我使用的是节点v8.1.4 我有以下缓冲区 [ 191, 164, 235, 131, 30, 28, 164, 179, 101, 138, 94, 36, 115, 176, 83, 193, 9, 177, 85, 228, 189, 193, 127, 71, 165, 16, 211, 132, 228, 241, 57, 207, 254, 152, 122, 98, 100, 71, 67, 100, 29, 218, 165, 101, 25, 17,

我遇到了一个有趣的问题。 我使用的是节点v8.1.4

我有以下缓冲区

[ 191, 164, 235, 131, 30, 28, 164, 179, 101, 138, 94, 36, 115, 176, 83, 193, 9, 177, 85, 228, 189, 193, 127, 71, 165, 16, 211, 132, 228, 241, 57, 207, 254, 152, 122, 98, 100, 71, 67, 100, 29, 218, 165, 101, 25, 17, 177, 173, 92, 173, 162, 186, 198, 1, 80, 94, 228, 165, 124, 171, 78, 49, 145, 158 ] 
当我尝试使用nodejs和browser将其转换为utf8时,我得到了不同的结果。即使字符串的长度也不相同

是否有一种方法可以在浏览器中将字符串转换为utf8,方法与节点js相同

似乎nodejs替换为U+FFFD的某些序列的某些字符比浏览器中替换的序列长。所以输出utf8字符串是不同的

我在浏览器和nodejs中使用的代码是相同的 我有缓冲区对象tmpString

  tmpString.toString('utf-8')
toString('utf-8')。对于相同的源字节,浏览器和节点的长度不同

在nodejs中,我使用本机缓冲区实现,用于浏览器网页包加载polyfill(我认为是feross/buffer)


我想更准确地说,我尝试将缓冲区字节解释为UTF8字符串。

您尝试过TextEncoder/TextDecoder API吗?我在nodejs和浏览器中都使用了它们来转换字符串,但没有看到任何区别

例如:

const编码器=新的文本编码器('utf-8');
常量解码器=新的文本解码器('utf-8');
const foo=‘你好,世界!’;
const encoded=encoder.encode(foo);
console.log(编码);
const decoded=解码器。解码(编码);

控制台日志(已解码)您是否尝试过TextEncoder/TextDecoder API?我在nodejs和浏览器中都使用了它们来转换字符串,但没有看到任何区别

例如:

const编码器=新的文本编码器('utf-8');
常量解码器=新的文本解码器('utf-8');
const foo=‘你好,世界!’;
const encoded=encoder.encode(foo);
console.log(编码);
const decoded=解码器。解码(编码);

控制台日志(已解码)是的,它生成的输出与browser-toString()相同,可能比nodejs-one更正确,但我正在寻找相同的行为。你确定browser-toString()方法将缓冲区转换为编码的utf-8字符串吗?我找不到任何信息表明这是一种存在的方法。当我在UInt8数组缓冲区上使用toString()时,它会打印由逗号连接的字节值,如果我在ArrayBuffer上使用toString(),它会打印“[object ArrayBuffer]”。我们是否做了一些不同的事情?Nodejs使用使用提供的编码解码字符串的方法替代toString方法,而不是输出元素。在Nodejs中是的,但不在浏览器中。或者您使用的脚本也会在浏览器中覆盖它?如果是这样的话,那可能就是问题所在。谢谢,我正在努力找出问题所在。因为polyfill代码看起来非常接近原始代码。因此,devil似乎在小细节中。是的,它生成的输出与browser toString()相同,可能比nodejs更正确,但我正在寻找相同的行为。你确定browser toString()方法将缓冲区转换为编码的utf-8字符串吗?我找不到任何信息表明这是一种存在的方法。当我在UInt8数组缓冲区上使用toString()时,它会打印由逗号连接的字节值,如果我在ArrayBuffer上使用toString(),它会打印“[object ArrayBuffer]”。我们是否做了一些不同的事情?Nodejs使用使用提供的编码解码字符串的方法替代toString方法,而不是输出元素。在Nodejs中是的,但不在浏览器中。或者您使用的脚本也会在浏览器中覆盖它?如果是这样的话,那可能就是问题所在。谢谢,我正在努力找出问题所在。因为polyfill代码看起来非常接近原始代码。看来魔鬼就在小细节里。你说的“转换成UTF8”是什么意思?您的意思是“解释为UTF8字符串”,还是“将此XY编码的缓冲区转换为UTF8缓冲区”?请显示您在节点中使用的代码,以及您尝试在浏览器中使用的代码。请使用详细信息更新。如果您使用的是节点
buffer
polyfill,并且它执行的操作与本机不同,那么您可能应该将此测试用例报告为错误。谢谢,我将尝试找到解决方案。您所说的“转换为utf8”是什么意思?您的意思是“解释为UTF8字符串”,还是“将此XY编码的缓冲区转换为UTF8缓冲区”?请显示您在节点中使用的代码,以及您尝试在浏览器中使用的代码。请使用详细信息更新。如果您使用的是节点
buffer
polyfill,并且它执行的操作与本机不同,那么您可能应该将此测试用例报告为错误。谢谢,我们将尝试找到解决方案。