Строка сначала кодируется как UTF-8, а затем байты преобразуются в буквенные символы или процентные последовательности.
Это можно увидеть, сравнив результат EscapeUriString
с:
Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes("Percepção")));
// 50-65-72-63-65-70-C3-A7-C3-A3-6F
Стандарт RFC3986 , который гласит:
Когда новая схема URI определяет компонент, который представляет текстовые данные, состоящие из символов из универсального набора символов [UCS], данные должны быть сначала закодированы как октеты в соответствии с кодировкой символов UTF-8 [STD63];тогда только те октеты, которые не соответствуют символам в незарезервированном наборе, должны быть закодированы в процентах.
(Кроме того, обратите внимание, что Uri.EscapeDataString
часто более подходит для использования, чем Uri.EscapeUriString
.)