【发布时间】:2017-09-03 14:34:19
【问题描述】:
我遇到了一个有趣的问题。 我正在使用节点 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 中我使用原生缓冲区实现,浏览器 webpack 加载 polyfill(我认为是 feross/buffer)
我认为更准确的说法是我尝试将缓冲区字节解释为 UTF8 字符串。
【问题讨论】:
-
“转换为 UTF8”是什么意思?您的意思是“解释为 UTF8 字符串”,还是“将此 XY 编码缓冲区转换为 UTF8 缓冲区”?请显示您在 node 中使用的代码,以及您尝试在浏览器中使用的代码。
-
更新详情。似乎正确地说我尝试将缓冲区解释为 utf8 字符串
-
如果您使用节点
Bufferpolyfill 并且它的功能与原生节点不同,您可能应该将此测试用例报告为错误。 -
谢谢,会努力寻找解决办法。
标签: javascript node.js string utf-8