【问题标题】:Change string encoded in win1250 to utf8将win1250编码的字符串改为utf8
【发布时间】:2017-02-17 17:35:29
【问题描述】:

我正在加载一个编码为 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);

但两者都没有真正正确地改变编码。我有什么遗漏吗?

【问题讨论】:

  • 您没有错误地进行编码/解码吗?从您的问题看来,您正在尝试在 win1250 中解码文件,并将其视为 utf-8?
  • 是的,我确实有一个文件在 win1250 中,我希望它是 utf8。问题是,它是从字符串到字节的“编码”和从字节到字符串的“解码”。更多github.com/ashtuchkin/iconv-lite

标签: javascript encoding utf-8 iconv


【解决方案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应该直接获取二进制数据。

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

【讨论】:

  • 非常感谢!我没有读过太多关于编码的内容,这就是为什么我试图首先将它从win1250编码为字节,然后将它从字节解码为utf8。这显然不是这样做的方法。节省了我很多时间!
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 2016-12-21
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多