我有一个像下面这样的 URL
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。
如何读取正确的值?
请注意,我不是生成查询字符串的人,我无法控制它。
最佳答案
虽然 á
确实被编码为 U+00E1 ,UTF-8编码(与URL参数相关)是0xC3 0xA1
。
您可以通过在重音字母上调用维基百科条目来验证,例如 http://en.wikipedia.org/wiki/%C3%81
U+FFFD是 Unicode 替换字符,表示给定的字符值无法在 Unicode 中正确编码。
更新:
你的问题有两点。
首先:如何将 Unicode 字符串编码为参数。使用
"?q=" + HttpUtility.UrlEncode(value)
第二:如何检索 Unicode 值?使用:
Request["q"]
如果您从您无法控制的其他来源收到 %E1
,也许 RawUrl 可以帮助您。 (我没试过)
关于c# - QueryString 将 %E1 转换为 %ufffd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327085/