【问题标题】:Convert CP437 using JavaScript Encoding API in Browser在浏览器中使用 JavaScript 编码 API 转换 CP437
【发布时间】:2019-04-18 07:11:29
【问题描述】:

有没有办法在浏览器中使用新的Encoding API 将 CP437 转换为 UTF8?

我试过了:

decoder = new TextDecoder('CP437');
decoder = new TextDecoder('IBM437');

但出现错误:

未捕获的 RangeError:无法构造“TextDecoder”:编码 提供的标签 ('IBM437') 无效。 在:1:11

我也尝试过使用破折号CP-437IBM-437

在 GNU/Linux 上我可以使用 iconv,我找到了项目 iconv-js,但它似乎只转换了一种编码。

使用 Emscripten 将 iconv 编译为 JavaScript 是唯一的选择吗?

【问题讨论】:

  • npm上好像有node-iconv这个包。
  • 似乎不支持此编码标签,请使用iso-xxx 和/或windows-xxx 编码(例如看这里的polyfill github.com/inexorabletash/text-encoding
  • 看来 node-iconv 只适用于 node,因为它有 C 代码。

标签: javascript utf-8 character-encoding


【解决方案1】:

编码 API 有限,不支持 CP437。所以转换的过程是这样的:

使用创建空的 npm 项目

npm init

然后安装

npm install -g browserify
npm install iconv-lite buffer-shims

创建 index.js 文件:

window.iconv = require('iconv-lite');
window.Buffer = require('buffer-shims');

运行

browserify -o iconv.js index.js

现在您有了可以在浏览器上运行的 iconv lite 库的浏览器版本(在iconv.js 文件中)。

有了它你可以运行:

 document.getElementById('file').addEventListener('change', function(event) {
     var reader = new FileReader();
     reader.onload = function(event) {
         var utf8_str = iconv.decode(Buffer.from(event.target.result), 'CP437');
     };
     reader.readAsArrayBuffer(event.target.files[0]);
 });

您需要:

<input id="file" type="file" />

<meta charset="utf-8"/>

所以 iconv-lite 可以将字符串转换为 utf-8,这是唯一有效的字符集。

如果你想要已经构建的 JS 文件,你可以使用 jsdelivr 访问我的静态资产 github repo:

https://cdn.jsdelivr.net/gh/jcubic/static@master/js/iconv.js

【讨论】:

  • 谢谢,已经尝试了几个小时。 reader.readAsArrayBuffer做到了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2018-04-12
  • 2020-02-15
  • 2020-08-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多