Процентное кодирование каждого символа utf-8 с помощью c # - PullRequest
3 голосов
/ 14 ноября 2011

Я хотел бы подготовить строку, чтобы поместить ее в запрос "post". К сожалению, все методы, которые я нашел для кодирования URL, похоже, применяют процентное кодирование только к нескольким символам. Различные методы, например. HttpUtility.UrlEncode, оставьте некоторые символы, такие как () и §, нетронутыми.

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Это больше того, что вы ищете?

string input = @"such as () and § untouched.";
//Console.WriteLine(input);
Console.WriteLine(HttpUtility.UrlEncodeUnicode(input));
Console.WriteLine(HttpUtility.UrlEncode(input));
string everything = string.Join("", input.ToCharArray().Select(c => "%" + ((int)c).ToString("x2")).ToArray());
Console.WriteLine(everything);
Console.WriteLine(HttpUtility.UrlDecode(everything));

//This is my understanding of what you're asking for:
string everythingU = string.Join("", input.ToCharArray().Select(c => "%u" + ((int)c).ToString("x4")).ToArray());
Console.WriteLine(everythingU);
Console.WriteLine(HttpUtility.UrlDecode(everythingU));

который выводит:

such+as+()+and+%u00a7+untouched.
such+as+()+and+%c2%a7+untouched.
%73%75%63%68%20%61%73%20%28%29%20%61%6e%64%20%a7%20%75%6e%74%6f%75%63%68%65%64%2e
such as () and � untouched.

%u0073%u0075%u0063%u0068%u0020%u0061%u0073%u0020%u0028%u0029%u0020%u0061%u006e%u0064%u0020%u00a7%u0020%u0075%u006e%u0074%u006f%u0075%u0063%u0068%u0065%u0064%u002e
such as () and § untouched.
0 голосов
/ 14 ноября 2011

К сожалению, большинство существующих конвертеров смотрят только на несовместимые символы URL.В основном для (как вы упомянули) кодирования URL или для предотвращения межсайтового скриптинга.

Если вы хотите создать его с нуля, для поиска потребуется некоторое время, но это будетинтересно.Вы можете переопределить существующие кодировщики и добавить дополнительные символы, которые вас интересуют, или изменить все буквы и цифры.

Вот хорошая ссылка для UTF / ASCII -> HTML Encoded (%)

...