我正在加载一个编码为 win1250 的文件,但是当我加载它时,它包含诸如 p��jemce
之类的字符,而不是 příjemce
(注意变音符号。)
我想将编码从 win1250 更改为 UTF8。
我设法使用以下代码在 PHP 中完成此操作
$content = iconv('windows-1250', 'UTF-8', $content);
但我无法用 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
应该直接获取二进制数据。
我没有完整的开发环境,因此上面的代码没有经过充分测试,希望它至少能起到启发作用。
关于javascript - 将win1250编码的字符串更改为utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304146/