VS2005 で汎用 HTTP ハンドラーを開発し、デバッグ モードでテストしています。クエリ文字列に上位ビット文字が含まれている場合を除いて、うまく機能 します。
私のマシンの IE8 は、UTF-8 URL を送信するように設定されています。コードをデバッグするときに、IE8 のアドレス バーに次のように入力しています。
http://app/myHandler.ashx?term=foo // すべてが機能します http://app/myHandler.ashx?term=þorn // 機能しません -- データベースからのクエリが失敗します
データベースは SQLite で、UTF-8 エンコーディングを使用しており、正常に動作します。これらの特殊文字を使用するクエリは、他の GUI ツールを使用するか、Visual Studio への System.Data.SQLite GUI アドインを使用して SQLite に対して直接発行すると、正常に機能します。
クエリ文字列からの値を正しくデコードしていますか? GetString() はバイトをデコードしませんか?
public StandardRequest(HttpContext コンテキスト) { UTF8Encoding utf8 = new UTF8Encoding(); if (context.Request.QueryString["term"] != null) { byte[] w = utf8.GetBytes(context.Request.QueryString["term"]); 単語 = utf8.GetString(w); ...
HTTP ハンドラでは、ContentEncoding が UTF-8 に設定されています。
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
デバッガーのローカル ウィンドウでは、Request.ContentEncoding も UTF-8 です。
しかし、ローカル ウィンドウでクエリ文字列の値を調べると、クエリ文字列'þorn'の用語値が'[]orn'として表示されており、送信先の sql ステートメントでこのように表示されています。データベース。まるでキャラクターが認識されていないかのようです。
クエリ文字列から値を取得して文字列に変換する方法に何か問題がありますか?