TextEncoder 和 TextDecoder 不是彼此完美的倒数

Mel*_*lab 6 javascript string character-encoding

我收到了我之前关于编码字符串的问题的答案。我提出这个问题的希望是获得某种在字符串和它的表示形式之间转换的可逆方式,就像在 Python 3 中一样。

不过,我遇到了一个特定 Uint8Array 的问题:

var encoder = new TextEncoder();
var decoder = new TextDecoder(encoder.encoding);
var s = [248, 35, 45, 41, 178, 175, 190, 62, 134, 39];
var t = Array.from(decoder.decode(encoder.encode(Uint8Array(s)));
Run Code Online (Sandbox Code Playgroud)

我期望的值t[248, 35, 45, 41, 178, 175, 190, 62, 134, 39]。相反,它是[239, 191, 189, 35, 45, 41, 239, 191, 189, 239, 191, 189, 239, 191, 189, 62, 239, 191, 189, 39]。发布答案的人已被暂时停止访问该网站,因此我无法通过评论他的答案来解决此问题。

art*_*tgb 1

改成。var t = Array.from(decoder.decode(encoder.encode(Uint8Array(s)));
var t = JSON.parse('['+decoder.decode(encoder.encode(new Uint8Array(s)))+']');

var encoder = new TextEncoder();
var decoder = new TextDecoder(encoder.encoding);
var s = [248, 35, 45, 41, 178, 175, 190, 62, 134, 39];
var t = JSON.parse('['+decoder.decode(encoder.encode(new Uint8Array(s)))+']');
console.log(t);
Run Code Online (Sandbox Code Playgroud)

  • 为什么这是必要的? (4认同)