是否可以使用新的Encoding 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吗?
答案 0 :(得分:0)
编码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。