编码的unicode字符丢失了

时间:2011-11-10 08:13:53

标签: asp.net c#-4.0 unicode request urlencode

我提交

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/ȼ�����/

编码部分丢失。问题出在哪儿?

2 个答案:

答案 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())