0

我正在尝试将二进制数据转换为这样的字符串:

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

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

虽然当我在 Chrome 中做同样的事情时,string返回一个空字符串""

有人可以解释一下,这是怎么回事吗?

4

1 回答 1

1

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("")}'.`);

于 2018-07-19T12:22:37.590 回答