Не подходит для кодировки файлов при работе с Chrome File System API

Мне нужно прочитать файл, который содержит группу символов, перемещенных 65 в таблице ASCII. Это означает, что для каждого символа я должен сделать:

String.fromCharCode('¢'.charCodeAt(0)-65) // returns 'a'

Но это не работает вообще. Я попросил моих друзей сделать тест с использованием Python, введя тот же файл, и они получили правильный результат.

Когда я пытаюсь выполнить ту же работу с файловой системой Chrome, она вообще не работает. Я не могу вернуть ожидаемые символы. Я думаю, что это проблема с моей платформой кодирования / кодировки, но я не могу понять, что и как исправить.

Я попытался открыть файл с другой кодировкой:

var reader=new FileReader();

reader.readAsText(file, 'windows-1252'); // no success
reader.readAsText(file, 'ISO-8859-2'); // no success

Цени любую помощь

1 ответ

Решение

Проблема в том, что ваш сдвинутый текст больше не readAsText критерии. Попытка прочитать его с любой стандартной кодовой страницей не сработает.

Вы должны прочитать файл как двоичный файл с readAsArrayBuffer(), интерпретировать его как 8-битный массив типа unsigned, сдвинуть байты, а затем преобразовать результат в строку.

var buf = new Uint8Array(reader.readAsArrayBuffer(file));
buf = buf.map((byte) => byte-65);
var string = new TextDecoder("ascii").decode(buf);
Другие вопросы по тегам