TextEncoder和TextDecoder不是彼此完美的逆转

时间:2017-11-14 22:53:36

标签: javascript string character-encoding

我收到了关于编码字符串的上一个问题的this answer。我希望在提出这个问题时,可以采用一种可逆的方式在字符串及其表示形式之间转换,如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)));

我预计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]。发布答案的人暂时被暂停了,所以我无法通过评论他的答案来解决这个问题。

1 个答案:

答案 0 :(得分:2)

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);