Ситуация такая. Есть есть очень старый 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 ?
Есть какие нибудь идеи, что с этим делать?