特定ページだけがエンコード違うとか

リクエストパラメータのデコードはほとんどasp.netがやってしまうので、Request.FormとかRequest.QueryStringを読み取った時点で全てがweb.configに指定されたrequestEncodingでデコードされてしまう。だからシステムがutf8で特定のページだけがShift_JISなんていう場合(大抵外部システムとの連携だ)、そのページを処理する時に「文字化け」してしまう。
googleで「文字化け解消」を探すとほとんどがweb.configのrequestEncodingを変更する、って対応しかない。なんでこんな場当たり的対処ばかりなのかねーと愚痴たれてても仕方がないのでどうにかしてみる。

    NameValueCollection requestParse()
    {
        NameValueCollection n = new NameValueCollection();
        Encoding enc = Encoding.GetEncoding("Shift_JIS");
        StreamReader r = new StreamReader(Request.InputStream);
        string s = r.ReadToEnd();
        r.Close();

        string[] ss = StringUtil.Split(s,"&");
        for (int i = 0; i < ss.Length; i++)
        {
            string[] sss = StringUtil.Split(ss[i],"=");
            n[sss[0]] = HttpUtility.UrlDecode(sss[1], enc);
            
        }
        return n;
    }

かなりやっつけ。あ、StringUtil.Splitってstring#Splitの代わりで文字列が空の場合長さ0の配列にするユーティリティメソッド。
うまくいくのか?