2017-11-14 3 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에 문제로 실행

파이썬 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'는'Uint-8Array'가 아닌 문자열 (UTF-16 코드 단위의 연속열)을 기대합니다. 당신은 문자 인코딩으로 비 텍스트 데이터를 처리하려고하지 않습니다. @artgb처럼 코드를 작동시킬 수는 있지만 배열을 문자열로 변환하여 'TextEncoder.encode'에 전달하는 것을 포함하여 일부 불명확 한 변환이 발생합니다. –

답변

1

변경 var t = Array.from(decoder.decode(encoder.encode(Uint8Array(s))); to
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);

관련 문제