Я работаю над проектом, который интегрирован с поставщиком платежей (epdq). Они передают переменные успешной оплаты обратно в строке запроса на наш веб-сайт. Часть возвращаемого запроса включает имя клиента. Мы заметили, что если кто-то вводит специальный символ, например «£», параметры запроса повторяются так: CN = Mr +% A3Test + TestUrlDecode и символы ASCII в C#
Это довольно странно, потому что я думал, что значение UrlEncoded для символа £ % C2% А3.
Независимо от того, что это вызывает проблемы, поскольку мы должны декодировать значения, переданные обратно в querystring, и получить их истинное значение, в данном случае символ £.
Я пробовал два разных способа сделать это:
foreach (var key in querystring.Keys)
{
var enc = System.Text.Encoding.GetEncoding("iso-8859-1");
Logger.Debug(HttpUtility.ParseQueryString(querystring.ToString(), enc)[key.ToString()]);
Logger.Debug(HttpUtility.UrlDecode(querystring.Get(key.ToString()), enc));
}
Я пробовал как с ISO-8859-1 и UTF-8. Оба, однако, преобразуют строку в «Mr Test Test», очевидно, символ, который он не смог правильно преобразовать.
За исключением использования регулярного выражения и поиска строки для целого множества возможных символов, которые пользователь мог ввести, а затем преобразовать их из их эквивалента ASCII (примечание в ASCII% A3 является символом £), я не знаю, где еще пойти с этим.
Может ли кто-нибудь указать какие-либо указатели?
Спасибо за ваше время заранее
dotdev
Спасибо за ответ - к сожалению, похоже, что нет никаких шансов - он все еще не преобразован в символ, который он распознает ... – dotdev
Каков результат, который вы получили, когда вы пробовали эту кодировку? –
То же, что и раньше, - неузнаваемый персонаж ui.e. ? в треугольнике .... – dotdev