javascript - 在浏览器中使用 JavaScript 编码 API 转换 CP437
问题描述
有没有办法在浏览器中使用新的编码 API将 CP437 转换为 UTF8 ?
我试过这个:
decoder = new TextDecoder('CP437');
decoder = new TextDecoder('IBM437');
但出现错误:
未捕获的 RangeError:无法构造“TextDecoder”:提供的编码标签(“IBM437”)无效。在: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 repo:
https://cdn.jsdelivr.net/gh/jcubic/static@master/js/iconv.js
推荐阅读
- android - 如何在框架布局中使用协调器布局?
- sql - 在不使用更新命令的情况下合并 2 个具有相同表约定设计的 SQL 表
- java - 如何将 lib 中的 jar 包含到 Netbeans 8.2 中的项目 jar 文件中?
- java - Java Hashmap containsKey 为现有键返回 false
- c - 为什么两个操作数的结果类型应该与操作数的类型匹配?
- android-studio - Gradle 在 android studio 中不起作用 [flutter]
- c++ - 转换类型
布尔,怎么了? - indexing - 设置索引!没有为 WeakRefStrings 定义。SpringArray{String,1}
- c# - 如何将端点映射到 ASP 中的静态文件。网络核心?
- php - Singleton 在 Laravel 中反复运行