- PR -

UrlEncodeした文字列を含むURLからRequest.QueryStringで値がうまく取得できない

1
投稿者投稿内容
apu
会議室デビュー日: 2003/10/14
投稿数: 11
投稿日時: 2005-04-07 11:25
1.日本語のValue「識別子」をhoge.csファイル内でUrlEncodeしたいので、
System.Web.HttpUtility.UrlEncode("識別子")
とし、「%e8%ad%98%e5%88%a5%e5%ad%90」という文字列を得ました。

これを含むURLを作成し、
http://localhost/hoge/hoge.aspx?id=%e8%ad%98%e5%88%a5%e5%ad%90
これをリンクにして別のページに動的に貼り付けてクリックさせます。
hoge.aspx.csでRequest.QueryString["id"]を取得するのですが "隴伜挨蟄\\0" となってしまいます。

2.一方、日本語のValue「識別子」をaspx.csファイル内でUrlEncodeすると
Server.UrlEncode("識別子") →「%8e%af%95%ca%8eq」
となります。

これを
Response.Redirect("http://localhost/hoge/hoge.aspx?id=%8e%af%95%ca%8eq");
とするとhoge.aspx.cs内で
Request.QueryString["id"]を取得すると問題なく "識別子" となります。


System.Web.HttpUtility.UrlEncode と、Server.UrlEncode の違いなんでしょうか?
2のようにRequest.QueryStringで元の文字列を取得したいのですが問題として何が考えられますか?

#このスレッドを参考にしましたが
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16142&forum=7
Web.configでは
 requestEncoding="shift-jis"
 responseEncoding="shift-jis"
となっています。

文字コードはわたしの弱点でホトホト困っています。
どうぞよろしくお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-04-07 12:47
http://www.atmarkit.co.jp/fdotnet/dotnettips/212urlencode/urlencode.html
の注にあるように、UrlEncodeの第2引数でEncodingを指定すればよいでしょう。

>System.Web.HttpUtility.UrlEncode と、Server.UrlEncode の違いなんでしょうか?
おそらく、前者はweb.configの影響を受けないのでデフォルトのUTF-8、後者はweb.configが効いてshift-jisで扱われるのでしょう。

[ メッセージ編集済み 編集者: todo 編集日時 2005-04-07 12:53 ]
apu
会議室デビュー日: 2003/10/14
投稿数: 11
投稿日時: 2005-04-07 13:57
コメントありがとうございます。

> UrlEncodeの第2引数でEncodingを指定すればよいでしょう。

この方法で無事にできました↓。

System.Text.Encoding e = System.Text.Encoding.GetEncoding("Shift_JIS");
string uri = System.Web.HttpUtility.UrlEncode("識別子", e);

とても助かりました。ありがとうございました!!

> おそらく、前者はweb.configの影響を受けないのでデフォルトのUTF-8、後者はweb.configが効いてshift-jisで扱われるのでしょう。
#こういったことが理解できるように勉強しなければいけないですね…。
1

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