我提交
MyApp.aspx?url=http://product.cn.china.cn/selling-leads/%C8%BC%C6%F8%D4%EE%BE%DF/
url作为对我的ASP.NET应用程序的GET请求。中文字符用url编码。我试图用
读取URL参数值httpRequest.Params["url"]
并得到这样的结果
http://product.cn.china.cn/selling-leads/ȼ�����/
编码部分丢失。问题出在哪儿?
答案 0 :(得分:2)
您确定这些字符是否已在网址中正确编码?
如果我的网址是公共汽車
,我会%E5%85%AC%E5%85%B1%E6%B1%BD%E8%BB%8A
如果我传递%E5%85%AC%E5%85%B1%E6%B1%BD%E8%BB%8A
作为查询参数,它可以正常工作,但不会使用您的字符串%C8%BC%C6%F8%D4%EE%BE%DF
。
如果我尝试用online URL encoder/decoder解码您的字符串,它也不起作用,同样如果我尝试System.Text.Encoding.UTF8.GetString
。
所以我认为问题在于您提交的字符串编码错误。
** 更新 **
仔细检查后,您看到URL字符串中的字符是GBK编码的(您链接的页面也表示使用的字符集是GBK)。
我不确定该怎么做,但是如果你想在其他编码中使用URL参数,则需要将GBK转换为其他编码。
** 更新 **
好的,我想我已经明白了:)
看起来ASP.NET正在使用错误的编码解码URL。您可以通过将请求添加到web.config文件来强制ASP.NET将请求解码为GBK:
<system.web>
<globalization requestEncoding="gbk" />
</system.web>
如果由于某种原因您不想这样做,那么您需要自己解析和解码原始URL:
// TODO: Grab this from Request.RawUrl
string urlParam = "%C8%BC%C6%F8%D4%EE%BE%DF";
// Source encoding is GBK
Encoding gbk = Encoding.GetEncoding("gbk");
string decodedParam = HttpUtility.UrlDecode(urlParam, gbk);
decodeParam现在将包含你想要的东西,燃气灶具
(“燃气灶”,我认为:)
答案 1 :(得分:0)
好的,我和希伯来语有同样的问题
你必须使用HttpUtility.UrlDecode和HttpUtility.UrlEncode()
喜欢这个
dim str=HttpUtility.UrlEncode("the string that add to the url")
(当然要在网址中发送str)
在接收页面中使用此
dim temp as string=HttpUtility.UrlDecode(httpRequest.Params["url"] , System.Text.Encoding.Default())
您也可以在javascript中执行此操作
escape(value)
是对文本进行编码的函数
你可以在服务器端使用这样的:
dim temp as string=HttpUtility.UrlDecode(httpRequest.Params["url"] , System.Text.Encoding.Default())