Я очень ценю любого, кто смотрит на этот вопрос и любые полезные ответы.
Я изучаю возможность загрузки текстового файла с внешнего сайта на мой сайт. Текстовый файл был сжат или сдут с помощью gzip, поэтому путь выглядит как https://host/filename.txt.gz
Я пытаюсь загрузить содержимое с помощью XMLHttpRequest, а затем пытаюсь распаковать/раздуть содержимое, используя эту библиотеку https://github.com/augustl/js-inflate. Тип содержимого ответа: Application/Octet-stream.
Итак, моя проблема в том, что, несмотря на то, что текст responseText декодируется, многие из произведенных символов являются "символом замены" (код 65533 или ). Насколько я понимаю, это происходит, когда декодер не может обработать последовательность байтов.
Текстовые файлы, которые я пытаюсь декодировать/распаковать, безусловно, действительны, потому что если я их загружаю, они могут быть распакованы и просмотрены очень хорошо.
var request = new XMLHttpRequest();
request.open('GET', 'https://host.something/filename.txt.gz');
request.onload = function() {
// the request text is all, there, looking like ��'�P GSE43615_non_normalized.txt t�I�,A�$���}���yXFf����D��...
var infwated = JSInflate.inflate(request.responseText); // (note: tried to base64decode the response first in case that it. it doesn't seem to be)
// the 'inflated' result comes back as an empty string.
// As I debug the JSInflate library, it appears the the library is looking for bytes to signal how the text should be processed.
// The code breaks out of the processing in the first conditional because the byte is not recognized
console.log(infwated || 'failed'); // it 'failed'
}
request.send();
Я надеюсь, что объяснил это, так что это имеет смысл. Итак, мои вопросы:
Возможно ли то, что я пытаюсь сделать? (акцент на возможном, а не на разумном)
Если так, то неясный вопрос: как мне прочитать ответ, чтобы его можно было обработать и распаковать? В частности, как можно "читать" текст из XMLHttpWebRequest таким образом, чтобы с ним мог работать раздувающий алгоритм?
Большое спасибо за любую помощь !!!
Убедитесь, что вы используете правильный responseType. "Текст" по умолчанию, возможно, это должен быть "блоб"?