我有以下网址
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。
我怎样才能读出正确的值?
请注意,我不是生成查询字符串的人,我无法控制它。
答案 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可以帮助您。 (我还没试过)