2017-02-17 181 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