QueryString将%E1转换为%ufffd

时间:2013-01-14 21:32:28

标签: c# asp.net .net-3.5 query-string urlencode

我有以下网址

http://mysite.com/default.aspx?q=%E1

%E1应该是á的地方。当我从C#页面拨打Request.QueryString时,我收到了

http://mysite.com/default.aspx?q=%ufffd

它适用于任何重音字符。 %E1, %E3, %E9, %ED等全部以%ufffd传递。正常编码值(%2D%2E%27)都可以正确传递。

配置文件已将全球化部分中的responseEncoding / requestEncoding设置为UTF-8。

我怎样才能读出正确的值?

请注意,我不是生成查询字符串的人,我无法控制它。

1 个答案:

答案 0 :(得分:3)

虽然á编码为U+00E1是正确的,但UTF-8编码(与网址参数相关)是0xC3 0xA1

您可以通过调用带有重音字母的维基百科条目进行验证,例如http://en.wikipedia.org/wiki/%C3%81

U+FFFD是Unicode替换字符,表示无法在Unicode中正确编码给定字符值。

更新

你的问题有两点。

首先:如何将Unicode字符串编码为参数。使用

"?q=" + HttpUtility.UrlEncode(value)

第二:如何检索Unicode值?使用:

Request["q"]

如果您从其他一些您无法控制的来源收到%E1,也许RawUrl可以帮助您。 (我还没试过)