DecodeURIComponent не поддерживает кодированный компонент% uXXXX - PullRequest
0 голосов
/ 26 мая 2018

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

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

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

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

escape ()

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

Описание

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

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

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

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

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

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

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

0 голосов
/ 26 мая 2018

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

var jd = decodeURIComponent(unescape(json.job));
...