Ad

Convert CP437 Using JavaScript Encoding API In Browser

- 1 answer

Is there a way to convert CP437 to UTF8 in browser using new Encoding API?

I've tried this:

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

but got error:

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

I've also tried with dashes CP-437 and IBM-437.

On GNU/Linux I can use iconv, I've found project iconv-js, but it seems it only convert one encoding.

Is compiling iconv to JavaScript using Emscripten the only option?

Ad

Answer

Encoding API is limited and don't support CP437. So the process of conversion look like this:

create empty npm project using

npm init

then install

npm install -g browserify
npm install iconv-lite buffer-shims

create index.js file with:

window.iconv = require('iconv-lite');
window.Buffer = require('buffer-shims');

run

browserify -o iconv.js index.js

and now you have browser version of iconv lite library (in iconv.js file) that will work from browser.

With it you can run:

 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]);
 });

you will need to have:

<input id="file" type="file" />

and

<meta charset="utf-8"/>

so iconv-lite can convert string to utf-8, which is the only valid charset.

If you want already Built JS file, you can access my static assets github repo using jsdelivr:

https://cdn.jsdelivr.net/gh/jcubic/[email protected]/js/iconv.js

Ad
source: stackoverflow.com
Ad