1

C# から CLASSIC ASP サービスに HTTP GET 要求を送信する必要があります。このサービスは、標準の UTF-8 ではなく、Windows-1255 エンコーディングを使用して QueryString からデータをデコードするように構築されています。

HttpWebRequest クラスは常に GET データを UTF-8 でエンコードしているようで、うまくいきません。GET データが UTF-8 エンコーディングとは異なる方法でエンコードされているときに、C# から HTTP GET リクエストを送信する方法はありますか?

ありがとう。

4

2 に答える 2

2

get リクエストにヘッダーを設定する必要があります。

コンテンツ タイプ: テキスト/xml; 文字セット=windows-1255

HttpRequest r = new HttpRequest(.....);    
r.Headers.Add("Content-Type", "text/xml; Charset=windows-1255");

たぶん、この投稿も役に立つでしょう:

http get リクエストから英語以外の文字を読み取る

于 2012-09-05T14:07:32.643 に答える
0

わかりました、私はついに答えを得ました。

まず、ヘッダーに ContentType を指定するとうまくいきません。宛先 URL に英語以外の文字が含まれている場合、HttpWebRequest は常に UTF-8 + URLEncode を使用して、要求が送信される最終的な URI を構築します。

UTF-8 とは異なるエンコーディングを使用するには、URL 値を自分でエンコードする必要がありました (期待どおりに HttpWebRequest に必要なエンコーディングを提供するのではなく)。

次の関数は HTTP GET URL を作成しますが、値は要求されたエンコードでエンコードされます (デフォルトの UTF-8 ではありません)。

  string BuildData(NameValueCollection getData, Encoding enc)
    {
        StringBuilder urldata = new StringBuilder();
        for (int i = 0; i < getData.Count; i++)
        {
            if (i > 0) urldata.Append("&");
            urldata.Append(getData.Keys[i] + "=" + HttpUtility.UrlEncode(enc.GetBytes(getData[i])));
        }
        return urldata.ToString();
    }

HttpWebRequest は次のようなもので使用できます

"http://get-destination.com/submit?" + BuildData(keysAndValues, Encoding.GetEncoding(1255));

この場合、HttpWebRequest は、英語以外の文字を含まない既にエンコードされた URL を取得し、そのまま保持します。

于 2012-09-24T19:23:40.543 に答える