2017-02-17 1 views
0

UTF8로 win1250로 인코딩,하지만 난 그것을로드 할 때, 그것은 p��jemce 대신 příjemce 같은 문자가 (노트 분음 부호를.)변경 문자열은 내가 win1250을 인코딩 한 파일을로드하고있어

내가 변경하려면

win1250에서 UTF8 로의 인코딩.

는 다음 코드

$content = iconv('windows-1250', 'UTF-8', $content);

와 PHP에서 그것을 관리하지만 자바 스크립트에서 그것을 할 수없는입니다. 나는이

같은 (그래서 "인코딩 프록시"로 PHP를 사용할 수 없습니다)

내가 (NPM)에 도서관 iconv-litetext-encoding를 사용하려 한 서버로 보내지 않고 클라이언트에서이 인코딩을 할 필요가

var reader = new FileReader(); 

    reader.onload =() => { 
     var data = reader.result; 
     // iconv-lite 
     var buf = iconv.encode(data, 'win1250'); 
     var str1 = iconv.decode(new Buffer(buf), 'utf8'); 

     // text-encoding 
     var uint8array = new TextEncoder('windows-1250').encode(data); 
     var str2 = new TextDecoder('utf-8').decode(uint8array); 

     console.log(str1); 
     console.log(str2); 
    }; 

    reader.readAsText(file); 

하지만 실제로 인코딩을 올바르게 변경하지 않았습니다. 제가 빠진 것이 있습니까?

+1

잘못된 방법으로 인코딩/디코딩하지 않았습니까? 귀하의 질문에 win1250에서 파일을 디코드하려고 시도하는 것처럼 들리며 utf-8로 처리합니까? –

+0

예, win1250에있는 파일이 있는데 utf8이 되길 원합니다. 문제는 문자열에서 바이트로 "인코딩"하고 바이트에서 문자열로 "디코딩"한다는 것입니다. https://github.com/ashtuchkin/iconv-lite에서 더보기 – tebeix

답변

0

나는 readAsArrayBuffer 직접 바이너리 데이터를 받아야하는 경우 당신은 단순히 reader.readAsArrayBuffer

var reader = new FileReader(); 
reader.onload =() => { 
    var buf = reader.result; 
    // iconv-lite 
    var str1 = iconv.decode(buf, 'win1250'); 

    // text-encoding 
    var str2 = new TextDecoder('windows-1250').decode(buf); 

    console.log(str1); 
    console.log(str2); 
}; 

reader.readAsArrayBuffer(file); 

을 시도 할 수 있었다 생각합니다.

위의 코드가 완전히 테스트되지 않았으므로 전체 개발 환경이 없기 때문에 적어도 영감을 줄 수 있기를 바랍니다.

+0

대단히 감사합니다! 필자는 인코딩에 대해 많이 읽지 않아서 win1250에서 바이트로 인코딩 한 다음 바이트에서 utf8로 디코딩하려고했습니다. 그것은 분명히 그것을하는 방법이 아닙니다. 많은 시간을 절약했습니다! – tebeix