Конвертируйте CP437 с помощью API кодирования JavaScript в браузере - PullRequest
0 голосов
/ 15 ноября 2018

Есть ли способ конвертировать CP437 в UTF8 в браузере, используя новый Кодировочный API ?

Я пробовал это:

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

но получил ошибку:

Uncaught RangeError: Не удалось создать 'TextDecoder': кодировка предоставленная метка ('IBM437') недействительна. в: 1: 11

Я тоже пробовал с тире CP-437 и IBM-437.

В GNU / Linux я могу использовать iconv, я нашел проект iconv-js , но, похоже, он конвертирует только одну кодировку.

Является ли компиляция iconv в JavaScript с использованием Emscripten единственным вариантом?

1 Ответ

0 голосов
/ 15 ноября 2018

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');

run

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, то естьтолько действительная кодировка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...