2017-02-17 242 views
0

我加載已編碼WIN1250文件,但是當我打開它,它有一個像p��jemce,而不是příjemce字符(注附加符號)更改字符串編碼WIN1250爲utf8

我想改變編碼從win1250到UTF8。

我設法用下面的代碼

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

做在PHP中,但我無法做到這一點的Javascript。我需要做這個客戶端編碼沒有將它發送到服務器(所以我不能使用PHP爲「編碼代理」)

我試圖使用庫iconv-litetext-encoding(上NPM)這樣

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

我想你可以簡單地嘗試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); 

如果readAsArrayBuffer應該直接將二進制數據。

我沒有整個開發環境,所以上面的代碼沒有完全測試,希望它至少可以鼓舞人心。

+0

非常感謝!我沒有讀過關於編碼的很多內容,這就是爲什麼我試圖首先將它從win1250編碼爲字節,然後將其從字節解碼爲utf8。這顯然不是這樣做的方式。爲我節省了很多時間! – tebeix