更改字符串编码WIN1250为utf8
问题描述:
我加载已编码WIN1250文件,但是当我打开它,它有一个像p��jemce
,而不是příjemce
字符(注附加符号)更改字符串编码WIN1250为utf8
我想改变编码从win1250到UTF8。
我设法用下面的代码
$content = iconv('windows-1250', 'UTF-8', $content);
做在PHP中,但我无法做到这一点的Javascript。我需要做这个客户端编码没有将它发送到服务器(所以我不能使用PHP为“编码代理”)
我试图使用库iconv-lite
和text-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);
但是实际上都没有正确地改变编码。有什么我失踪?
答
我想你可以简单地尝试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
你有没有编码/解码错误的方式?从你的问题,这听起来像你想解码win1250中的文件,并将其视为utf-8? –
是的,我有一个在win1250中的文件,我希望它是utf8。事情是,它从字符串到字节的“编码”和从字节到字符串的“解码”。更多https://github.com/ashtuchkin/iconv-lite – tebeix