Правильный способ превратить строку в Uint8Array кодов символов.Javascript

Форум по Javascript
Ответить
Anonymous
 Правильный способ превратить строку в Uint8Array кодов символов.

Сообщение Anonymous »

Сегодня я обнаружил неожиданную ошибку в моем пользовательском скрипте. Он берет элементы со страницы и делает что-то на основе связанного URL-адреса. Особая проблема заключалась в том, что он получил из ссылки URL-адрес в странной кодировке.
Скрипт использует глобальный объект URL для анализа URL-адресов ссылок. Отладка показала, что, хотя исходный URL-адрес выглядит правильно сформированным в HTML, получение его параметра запроса name возвращает искаженное значение с кучей символов, замененных символами с кодом 65533, поэтому впоследствии мой сценарий не может понять результат.
Исследование проблемы дало два вывода: вызов decodeURIComponent() для свойства URL-адреса search завершился неудачно, но unescape() создает что-то, что невозможно прочитать, но, по крайней мере, отдаленно похоже на действительную строку. Это побудило меня попытаться декодировать строку, поэтому я придумал следующий код:

Код: Выделить всё

let search = unescape(url.search);
if(search != url.search)
{
const d = new TextDecoder('cp1251'); // encoding was just a guess that worked.
search = d.decode(Uint8Array.from(search, c => c.charCodeAt(0)));
url.search = search;
}
Этот код работает и решает конкретную проблему с искаженным параметром URL-адреса name, но мне нужен совет, есть ли лучший подход? В частности, я не уверен, что код, который превращает строку в массив кодов символов, достаточно надежен, чтобы обрабатывать произвольный ввод. Хотя это URL-адрес, поэтому его содержимое должно быть ограничено, но я хотел бы сделать его максимально защищенным от ошибок. TextDecoder работает с Uint8Array, но что, если код символа больше 255?


Подробнее здесь: https://stackoverflow.com/questions/798 ... cter-codes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»