Декодировать строку из кэшированных данных TypedArray, переданных через webRequest FilterResponseData StreamFilter - PullRequest
0 голосов
/ 01 сентября 2018

Я использую веб-запрос 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: данные должны выглядеть следующим образом:

вар

Ничего за этим нет и между каждым символом нет пробелов.

1 Ответ

0 голосов
/ 10 декабря 2018

Похоже, что это действительно ошибка Firefox, и обходной путь, который я уже использовал, является единственным способом «исправить» это самостоятельно, пока Firefox не решит саму проблему.

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