0

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 ステートメントでこのように表示されています。データベース。まるでキャラクターが認識されていないかのようです。

クエリ文字列から値を取得して文字列に変換する方法に何か問題がありますか?

4

2 に答える 2

0

ヒントをありがとう、eed3si9n。解決へと導いてくれました。

私は、IE が手動でアドレス バーに入力された文字を [設定] で指定されたエンコーディングに変換するという (誤った) 印象を受けていました。そうではありません。そこに入力された URL は、すでにエンコードされている必要があります。

于 2010-01-24T11:51:51.707 に答える
0

context.Request.QueryString["term"]デコードする前に、整数には何が含まれていますか? たぶん、それはすでにあなたが望む価値を持っています。現在のバイトが UTF8 でない場合、utf8.GetBytes役に立ちません。

于 2010-01-21T19:26:57.463 に答える