我正在尝试将二进制数据转换为字符串,如下所示:
var string = new TextDecoder("utf-8").decode(Uint8Array.from([1, 2, 3]));
当我在 Firefox 中查找变量 string
返回的内容时,它显示了预期的字符串 "\u0001\u0002\u0003"
尽管当我在 Chrome 中执行相同操作时,string
返回一个空字符串 ""
有人可以解释一下这是怎么回事吗?
最佳答案
Chrome 控制台呈现不可打印字符的方式与 Firefox 不同。具体来说,不可打印的字符将呈现为空方 block 。尽管如此,该字符串还是由正确的 unicode 代码点组成。
下面的一行代码(嗯...)创建了 \u...
渲染。
Array.from(
{length: string.length}
, (v, k) => k
)
.map ( idx => `\\u${string.codePointAt(idx).toString(16).padStart(4, '0')}`)
.join()
;
测试一下:
let string = new TextDecoder("utf-8").decode(Uint8Array.from([1, 2, 3]));
console.log(`raw rep: '${string}'.`);
console.log(`code point rep: '${Array.from(
{length: string.length}
, (v, k) => k).map ( idx => `\\u${string.codePointAt(idx).toString(16).padStart(4, '0')}`
).join("")}'.`);
关于javascript - Firefox 和 Chromium 之间的 Uint8Array 到字符串转换差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51422220/