2

HttpWebRequestでWebリクエストのパラメータにISO-8859-1エンコーディングを使用する際に問題が発生しました。この問題は、POSTとGETの両方に関連しています。

一言で言えば、問題は、Öやæなどの非ASCII文字を含むリクエストパラメータが、ISO-8859-1表現ではなくUTF-8%表現に変換されることです。

Öは%d6ではなく%c3%96に変換されます。

解決策についての私の現在の考えは、リクエスト文字列をISO-8859-1バイト配列に変換してから、バイト配列をUTF-8に変換し、charをcharに変換し、127を超えるバイトをキャッチしてそれらを%に変換することです。代わりに16進値。

この問題を解決するためのより良い方法はありますか?

4

2 に答える 2

2

次のように独自のURLエンコードアルゴリズムを作成します。WebRequestメソッドは、カスタムエンコーディングで指定したURIを使用します。

string input = "http://www.example.com/q?Ö=æ";

StringBuilder sb = new StringBuilder();
foreach (byte by in Encoding.GetEncoding("ISO-8859-1").GetBytes(input))
{
    // NOTE: This is very simplistic; a robust solution would probably really need
    // to handle all non-alphanum and non-reserved characters, as specified by
    // http://www.ietf.org/rfc/rfc2396.txt
    if (by <= 0x7F)
        sb.Append((char) by);
    else
        sb.Append(string.Format("%{0:X2}", by));
}

Uri uri = new Uri(sb.ToString());
// uri.AbsoluteUri == "http://www.example.com/q?%D6=%E6"

WebRequest request = WebRequest.Create(uri);
using (request.GetResponse())
{
    // ...
}
于 2010-11-11T15:10:56.930 に答える
0

むしろ、「パイプの反対側」を修正して、utf-8を受け入れるようにします。UTF-8は、「将来を保証する」ための方法です。

于 2010-11-13T10:12:21.530 に答える