在浏览器中使用JavaScript编码API转换CP437

时间:2018-11-15 08:24:01

标签: javascript utf-8 character-encoding

是否可以使用新的Encoding 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吗?

1 个答案:

答案 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。