我遇到了一个有趣的问题。 我正在使用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时,我会得到不同的结果。甚至字符串的长度也不一样。
有没有办法在浏览器中将字符串转换为utf8,与节点js相同?
似乎某些节点j替换为U + FFFD的序列的某些字符比浏览器中的替换序列更长。所以输出utf8字符串是不同的
我在浏览器和nodejs中使用的代码是相同的 我有缓冲对象tmpString
tmpString.toString('utf-8')
tmpString.toString('utf-8')。长度在浏览器和nodejs中对于相同的源字节不同。
在nodejs中我使用本机缓冲区实现,对于浏览器webpack加载polyfill(我认为是feross / buffer)
我认为更准确地说我会尝试将缓冲区字节解释为UTF8字符串。
答案 0 :(得分:3)
您是否尝试过TextEncoder / TextDecoder API?我已将它们用于在nodejs和浏览器中转换字符串,并且没有看到任何差异。
E.g:
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);