@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

QueryStringのValueに日本語をセットするとRequest.QueryStringで値がうまく取得できない

1
投稿者投稿内容
ハム
会議室デビュー日: 2004/10/28
投稿数: 5
投稿日時: 2004-10-29 12:45
初めて投稿させていただきます。
ASPでの開発経験は2〜3年程度ありますが、ASP.NET(C#)での開発はまだ2週間程です。

現在、DB検索システムを作成しようとしてまして、あるHTMLファイル(search.html)からGETメソッドでASPXファイルへSubmit()→ASPXファイル側でRequest.QueryString["Key名称"] で値を取得つつSQL文を構築→DBからレコードセット(DataSet)を取得してこれをDataGridにバインドして検索結果を表示 というようなことをやりたいと考えています(フレーム使用)。
下記はソースの一部を簡略化したものと、問題発生の経緯を簡単に説明したものです。

【search.html]】
<form name="frmSearch" method="GET" action="searchResults.aspx" target="[フレーム名]">
<input name="year" type="text" id="year" value="2002"/>
<input name="title" type="text" id="title" value="日本語"/>
<input type="submit" name="submitSearch" id="submitSearch" value="検索実行" />
</form>
 ↓(Submit)
【searchResults.aspx】
渡って来たURL:/searchResults.aspx?date=2002&title=%93%FA%96%7B%8C%EA
Request.QueryString["date"] → "2002" (○:問題なし)
Request.QueryString["title"] → "{"  (×)
というように、URLEncodeされた日本語部分をRequest.QueryStringで取得しようとすると、よくわからない文字列が帰ってきてしまいます。
Request.Params["title"]とか、Server.UrlDecode(Request.Params["title"]) も試してみましたが結果は同じでした。

おそらく私の間抜けな勘違いではないかと思いますが、ここ2日間くらい自力では解決出来ませんでしたので、みなさんのお力をお借りできればと思います。

どうぞ、よろしくお願いいたします。

[ メッセージ編集済み 編集者: ハム 編集日時 2004-10-29 12:46 ]
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-10-29 13:50
aspx側のQueryStringはweb.configのresponseEncodingで定義されている文字コードで解釈されます。(デフォルトはutf8)
しかし、search.htmlが送信した文字列 %93%FA%96%7B%8C%EA はシフトJISですね。
文字コードが違えば文字化けします。
search.htmlをaspxファイルにすれば解決するでしょう。
ハム
会議室デビュー日: 2004/10/28
投稿数: 5
投稿日時: 2004-10-29 13:59
todo様、
ご回答ありがとうございます。

引用:

aspx側のQueryStringはweb.configのresponseEncodingで定義されている文字コードで解釈されます。(デフォルトはutf8)



ご指摘いただいたweb.configのresponseEncodingを"shift-jis"に変更することで問題解決しました。ありがとうございました。responseEncodingを"shift-jis"にすることで、他の部分に悪影響が出ることはありますか?まだ未実装ですが、このWebアプリではXMLファイル等も扱う予定です。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-10-29 17:47
引用:

responseEncodingを"shift-jis"にすることで、他の部分に悪影響が出ることはありますか?



ASP.NET 的にはありません。(はず)
ですが、アプリケーションの記述によっては問題を生じることがあるでしょう。

例えば Response.BinaryWrite() を行っているような場合、送出データのエンコーディングが ASP.NET アプリケーションの設定と合致していなければ文字化けします。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ハム
会議室デビュー日: 2004/10/28
投稿数: 5
投稿日時: 2004-10-29 18:13
渋木様、
ありがとうございました。

ASP.NET(特にWebコントロール)の便利さがだんだんわかってきて楽しくなってきました。
また自分では解決できない問題が出てきたらこちらで質問させていただきたいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)