首页 > 解决方案 > 在浏览器中使用 JavaScript 编码 API 转换 CP437

问题描述

有没有办法在浏览器中使用新的编码 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 是唯一的选择吗?

标签: javascriptutf-8character-encoding

解决方案


编码 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


推荐阅读