Я использую веб-запрос Mozilla StreamFilter для чтения http-запросов
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/ondata
Пока запросы не кэшируются в браузере, декодированный текст из типизированного массива декодируется правильно, но проблема возникает, когда данные поступают из кеша. Когда это происходит, это становится выходом для тех же данных, которые ранее были успешно декодированы:
20180901034956% ~ v a r
Это всего лишь маленький образец, строка довольно огромная. Я использую TextDecoder для этой цели с установленной опцией кодирования UTF-8.
После некоторого копания я обнаружил, что кешированный массив типов данных заполнен нулями, поэтому при чтении юникода этой строки он переводится в следующее, что, как мне кажется, в строке равно нулю:
\ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u000e \ u0000 \ u0000 \ u000020180901034956% \ u0000 \ u0000 \ u0000 \ u0005 \ u0000 \ u0000 \ u0000 \ u0001 \ u0000 \ u0000 \ u0000 \ u0014 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0002 \ u0000 \ u0000 \ u0000 \ u0001 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 «U0000» U0000 «U0000» U0000 «U0000» U003 «U0001» U0000 «U0000» U0000 «U0000» U0000 «U0000» U0000
Быстрое «решение», которое было применено, состояло в том, чтобы просто удалить нули из типизированного массива или нули из строки, не зная, как это может повлиять на исходные данные, что приведет к следующему:
20180901034956% ~ var
И соответствующая версия Unicode
u000e20180901034956% \ u0005 \ u0014 \ u0002 \ u0002 \ u0003 \ u0001 ~ u \ u0013var
Поиск некоторых из этих символов в Интернете показал, что некоторые из них являются управляющими, и теперь я застрял, не зная, почему это происходит вообще - кроме того, что это кэшированные данные - и как правильно их декодировать.
Я пытался обратиться к каналам Firefox за какой-то помощью, но, похоже, никто не отвечает через 3 дня подряд, поэтому я публикую этот вопрос здесь.
Как я могу правильно декодировать данные кеша, а также кто-нибудь может объяснить, почему они отображаются именно так? Все остальные данные, которые не кэшируются, корректно декодируются.
РЕДАКТИРОВАТЬ: После дополнительной копки я подтвердил, что данные считываются из кэшированного файла Firefox. Мне удалось найти нужный файл, и внутри он содержит следующий образец информации (он был открыт в блокноте):
20180901034956% ~ a v a r
Текст, следующий за «v a r», следует за тем же форматом каждого символа, за которым следует «пробел», если это даже пробел. Таким образом, подтверждается, что данные передаются из кэшированного файла, так как я могу правильно их декодировать? Я полагаю, что удаление пробелов не является правильным решением, поскольку оно также может удалить пробелы, являющиеся частью исходной информации данных.
EDIT2: данные должны выглядеть следующим образом:
вар
Ничего за этим нет и между каждым символом нет пробелов.