特定ページだけがエンコード違うとか
リクエストパラメータのデコードはほとんど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の配列にするユーティリティメソッド。
うまくいくのか?