Je développe un gestionnaire HTTP générique dans VS2005 et je le teste en mode débogage. Cela fonctionne bien sauf lorsque la chaîne de requête contient des caractères de plus haut-bit, par ex. Petite lettre latine épine/u00FE þ et la lettre minuscule latine Ae/u00E6 æ.VS2005 Gestionnaire HTTP générique UTF-8: problèmes avec certains caractères de la chaîne de requête (par exemple þ æ)
IE8 sur mon ordinateur est configuré pour envoyer des URL UTF-8. Je suis en tapant ce qui suit dans la barre d'adresse IE8 lors du débogage du code:
http://app/myHandler.ashx?term=foo // everything works http://app/myHandler.ashx?term=þorn // does not work -- query from database fails
La base de données est SQLite et il utilise le codage UTF-8 et il fonctionne très bien. Les requêtes qui utilisent ces caractères spéciaux fonctionnent correctement lorsqu'elles sont émises directement sur SQLite à l'aide d'autres outils graphiques ou à l'aide des compléments d'interface graphique System.Data.SQLite à Visual Studio. Est-ce que je décode les valeurs de la chaîne de requête correctement?
Est-ce que GetString() ne décode pas les octets?
public StandardRequest(HttpContext context) { UTF8Encoding utf8 = new UTF8Encoding(); if (context.Request.QueryString["term"] != null) { byte[] w = utf8.GetBytes(context.Request.QueryString["term"]); word = utf8.GetString(w); ...
Dans le gestionnaire HTTP, ContentEncoding est réglé sur UTF-8:
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
et dans la fenêtre du local du débogueur, Request.ContentEncoding est également UTF-8.
Mais quand j'examine la valeur de chaîne de requête dans la fenêtre habitants, le terme valeur de la chaîne de requête « THORN » est affiché comme « [] ORN » et c'est la façon dont il est affiché dans l'instruction sql que j'envoie à la base de données. C'est comme si le personnage n'avait pas été reconnu. Est-ce que je fais quelque chose de mal dans la façon dont la valeur est saisie à partir de la chaîne de requête et convertie en chaîne de caractères?