Я не знаю, какова кодировка символов по умолчанию, используемая вашим сервером (IIS?), Или ее можно изменить, но я могу сказать вам несколько вещей, которые могут помочь.
0xFC - это кодировка ISO-8859-1 для ü. Хотя кодовой точкой Unicode является U + 00FC, при кодировании с помощью UTF-8 это требует двух байтов и становится 0xC3 0xBC.
Если бы декодер UTF-8 увидел недопустимую последовательность байтов 0xFC, он декодировал бы ее как «заменяющий символ» Unicode, U + FFFD, и обнаружил бы, где он видел начало другой действительной последовательности байтов, в этом case 's'.
Причина, по которой вы получаете %3f
, в том, что '?' является "символом замены" для латинского набора символов, аналогично & # 65533; в наборе символов Юникод.
Я полагаю, что вы видите клиентскую кодировку с ISO-8859-1, но сервер декодирует с UTF-8. Как только он попадет на сервер, ваши данные будут повреждены. Я рекомендую вам изменить клиент для использования кодировки UTF-8; он должен запрашивать http://site/serviceproxy.ashx?q=D%C3%BCsseldorf
Похоже, вы создаете эти URL из JavaScript, поэтому вам следует использовать функции encodeURI
и encodeURIComponent
, а не escape
.