わかりました、私はついに答えを得ました。
まず、ヘッダーに 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 を取得し、そのまま保持します。