javascript - 在浏览器中使用 JavaScript Encoding API 转换 CP437

标签 javascript utf-8 character-encoding

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

我已经尝试过这个:

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

但出现错误:

Uncaught RangeError: Failed to construct 'TextDecoder': The encoding label provided ('IBM437') is invalid. at :1:11

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

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

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

最佳答案

编码 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 存储库:

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

关于javascript - 在浏览器中使用 JavaScript Encoding API 转换 CP437,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315114/

相关文章:

javascript - RequireJs 依赖总是未定义

javascript - 更改没有 id/class 的选择选项值

javascript - 在表中添加新标签

python - Unicode Python Windows 控制台

php - UTF-8 日期编码不正确

python - 打印 unicode 字符串与打印每个字符,有什么不匹配的地方?

javascript - 在 Javascript 中迭代对象数组

java - 在 Java 中创建带有国家字符的 tar 存档

java - 避免流问题的编码指南

c# - 在 c# 中记录击键时键入特殊字符时显示双字符