将win1250中编码的字符串更改为utf8

时间:2017-02-17 17:35:29

标签: javascript encoding utf-8 iconv

我正在加载一个编码为win1250的文件,但是当我加载它时,它包含p��jemce而不是příjemce的字符(注意变音符。)

我想将编码从win1250更改为UTF8。

我设法用PHP完成以下代码

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

但我无法在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 个答案:

答案 0 :(得分:1)

我认为您可以尝试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应直接获取二进制数据。

我没有整个开发环境所以上面的代码没有经过全面测试,希望它至少可以鼓舞人心。