Uint8Array 到 Firefox 和 Chromium 之间的字符串转换区别

Uint8Array to string conversion difference between Firefox and Chromium

我正在尝试将二进制数据转换为字符串,如下所示:

var string = new TextDecoder("utf-8").decode(Uint8Array.from([1, 2, 3]));

当我在 Firefox 中查找什么变量 string returns 时,它显示预期的字符串 "\u0001\u0002\u0003"

尽管当我在 Chrome 中执行相同操作时,string returns 一个空字符串 ""

谁能解释一下,这是怎么回事?

Chrome 控制台以不同于 firefox 的方式呈现不可打印的字符。具体来说,不可打印的字符呈现为空方块。尽管如此,该字符串由正确的 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("")}'.`);