La chaîne est d'abord codée en UTF-8, puis les octets sont transformés en caractères littéraux ou séquences codées en pourcentage.
Ceci peut être vu en comparant le résultat de EscapeUriString
à:
Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes("Percepção")));
// 50-65-72-63-65-70-C3-A7-C3-A3-6F
La norme est RFC3986, qui stipule:
Lorsqu'un nouveau schéma d'URI définit un composant qui représente des données textuelles comprenant des caractères du jeu de caractères universel [UCS], les données doivent d'abord être codées en octets selon le codage de caractères UTF-8 [STD63]; alors, seuls les octets qui ne correspondent pas aux caractères de l'ensemble non réservé doivent être codés en pourcentage.
(En aparté, notez que Uri.EscapeDataString
est souvent plus approprié à utiliser que Uri.EscapeUriString
.)
Sachez que 'Uri.EscapeUriString()' n'échappe pas '&' ni '=' ni '?', Ni aucun caractère réservé RFC. Cela signifie que vous cassez votre URL si vos paramètres de requête contenaient l'un de ces caractères. Il semble donc que Uri.EscapeDataString() 'soit la méthode à utiliser. –