2017-11-14 11 views
0

私は文字列のエンコードに関する前の質問にthis answerを受け取りました。TextEncoderとTextDecoderが完全に逆の関係になっていない

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))); 
:その質問をするの私の望みは、私も一つの特定のUint8Arrayで問題に遭遇した

はPython 3でのようにバイトの配列として文字列とその表現との間のシフトのいくつかの可逆的方法を取得することでした

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]です。答えを投稿した人はサイトから一時的に中断されていたので、私は彼の答えにコメントすることでこれを解決することはできません。

+0

あなたのコードは、あなたの質問に一致しないので、 'S'は、文字列を参照しません。 _あなたは文字エンコーディングでテキスト以外のデータを処理しようとしていませんか?_ 'TextEncoder.encode'は' Uint8Array'ではなく、文字列(UTF-16コード単位のシーケンス)を必要とします。 @artgbが行ったように、コードを動作させることができますが、配列を文字列に変換して 'TextEncoder.encode'に渡すなど、いくつかの不明な変換が行われます。 –

答えて

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

関連する問題