有没有办法在浏览器中使用新的 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-437
和 IBM-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/