DecodeURIComponent не поддерживает закодированный компонент %uXXXX

DecodeURIComponent не поддерживает несколько закодированных компонентов

Я отправляю JD в формате бюллетеня в моем json, в restapi. Поэтому я кодирую jd и отправляю. это работает правильно без каких-либо проблем. Но когда я пытаюсь декодировать закодированный JD, я получаю сообщение об ошибке, так как URI искажен

var jd = "Where are bullets most often used?

 - Technical writing
 - Reference works
 - Notes
 - Presentations";


var json ={
"job":encodeURIComponent(escape(jd));

}

Расшифровка:

var jd = decodeURIComponent(jd);

это мой закодированный jd, который я получаю из ответа.

Where%20are%20bullets%20most%20often%20used%3F%0A%uF0B7Technical%20writing%0A%uF0B7Sub%20bullet%0A%uF0B7Reference%20works%0A%uF0B7Notes%0A%uF0B7Presentations%0A%uF0B7Lists%0AAn%20alternative%20method%20is%20to%20use%20a%u807Dnumbered%20list%3A%0A1.Technical%20writing%0A2.Reference%20works%0A3.Notes%0A4.Presentations%0A5.Lists

person Nicoleta Wilskon    schedule 26.05.2018    source источник


Ответы (2)


вы должны unescape сначала

var jd = decodeURIComponent(unescape(json.job));
person John Velasquez    schedule 26.05.2018

Избегайте использования escape().

Из документов:

побег()

Функция escape() вычисляет новую строку, в которой определенные символы заменены шестнадцатеричной управляющей последовательностью.

Описание

Функция escape является свойством глобального объекта. Кодируются специальные символы, за исключением: @*_+-./

Шестнадцатеричная форма для символов, значение кодовой единицы которых равно 0xFF или меньше, представляет собой управляющую последовательность из двух цифр: %xx. Для символов с большей кодовой единицей используется четырехзначный формат %uxxxx.

Устарело. Не для использования на новых веб-сайтах.

— Справочник MDN по JavaScript — escape()

Из Википедии:

Существует нестандартная кодировка для символов Unicode: %uxxxx, где xxxx — кодовая единица UTF-16, представленная четырьмя шестнадцатеричными цифрами. Это поведение не указано ни в одном RFC и было отклонено W3C. Третье издание ECMA-262 по-прежнему включает функцию escape, которая использует этот синтаксис, наряду с функциями encodeURI и encodeURIComponent, которые применяют к строке кодировку UTF-8, а затем экранируют результирующие байты в процентах.

— Википедия — Процентное кодирование — Нестандартные реализации

person georgeawg    schedule 26.05.2018
comment
так какое решение для обработки? - person Nicoleta Wilskon; 29.05.2018
comment
Не используйте escape. encodeURIComponent это все, что вам нужно. - person georgeawg; 29.05.2018