Показать сообщение отдельно
  #1 (permalink)  
Старый 20.12.2020, 09:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,775

Непонятки с кодировкой в URLSearchParams
Ситуация такая. Есть есть очень старый CGI скрипт, написанный на C.
Работает как швейцарские часы, менять его никто не хочет (да и не может). У него одна проблема - он работает в кодировке cp1251. Т.е в этой кодировке ему надо давать русские буквы.
Сейчас там надо внести изменения в клиентскую часть, что бы использовать ajax (fetch) вместо обычной смены страницы, как при form submit.
Решил формировать строку параметров с помощью URLSearchParams
Перевести значение параметра запроса из юникода в cp1251 не проблема, но дальше начинаются непонятки.
Вот такой тестовый пример

<script>
let us = new URLSearchParams()
us.append('keyw', 'áåëûé êðîëèê')   //Это "белый кролик" в cp1251
let s = us.get('keyw')
console.log(s)              // áåëûé êðîëèê   Правильно
let cp =[...s].map (c => c.codePointAt(0))  // Получаю кодовые точки
console.log(cp)             // [225, 229, 235, 251, 233, 32, 234, 240, 238, 235, 232, 234]  Правильно
let sus = us.toString()
                         // keyw=%E1%E5%EB%FB%E9+%EA%F0%EE%EB%E8%EA   Так должно быть
console.log(sus)        // keyw=%C3%A1%C3%A5%C3%AB%C3%BB%C3%A9+%C3%AA%C3%B0%C3%AE%C3%AB%C3%A8%C3%AA   ????
</script>


Почему URLSearchParams.toString как то меняет кодировку?
Почему код 225 вместо %E1 превращается в %C3%A1 ?

Есть какие нибудь идеи, что с этим делать?

Последний раз редактировалось voraa, 20.12.2020 в 09:54.
Ответить с цитированием