javascript - 浏览器缓冲区到字符串的转换在浏览器和nodejs中不一样

标签 javascript node.js string utf-8

我遇到了一个有趣的问题。 我正在使用 Node 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 并使用浏览器将其转换为utf8 时,我得到不同的结果。甚至字符串的长度也不一样。

有没有办法像node js一样在浏览器中将字符串转换为utf8?

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

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

  tmpString.toString('utf-8')

tmpString.toString('utf-8').length 在浏览器和 NodeJS 中对于相同的源字节有所不同。

在nodejs中,我使用 native 缓冲区实现,以便浏览器webpack加载polyfill(我认为是feross/buffer)

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

最佳答案

您尝试过 TextEncoder/TextDecoder API 吗?我已经使用它们在 Nodejs 和浏览器中转换字符串,但没有看到任何差异。

例如:

const encoder = new TextEncoder('utf-8');
const decoder = new TextDecoder('utf-8');

const foo = 'Hello world!';
const encoded = encoder.encode(foo);
console.log(encoded);

const decoded = decoder.decode(encoded);
console.log(decoded);

关于javascript - 浏览器缓冲区到字符串的转换在浏览器和nodejs中不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46024477/

相关文章:

c++ - 如何比较 if 语句中的多个字符串?

javascript - 为什么我的 JQuery 推送菜单突然不工作了?

javascript - jQuery 查找具有特定类型的下一个元素的元素

node.js - Mongoose :Find and filter nested array

node.js - 如何使用 node.js 将图像文件保存到 sequelize db

javascript - 查找数组中最长的单词

javascript - 如果像 <br> 这样的自关闭标签没有关闭,JSX 中是否有一个 API 可以忽略?

javascript - 解耦按钮(2个按钮同时切换)并根据数据显示适当的按钮

javascript - Node.js 域模块的替代方案是什么?

swift - String类型的CharacterView和UnicodeScalarView有什么区别