Не подходит для кодировки файлов при работе с 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);