3

我有一个类似下面的网址

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

%E1应该在哪里á。当我Request.QueryString从我的 C# 页面调用时,我收到

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

它对任何重音字符执行此操作。%E1, %E3, %E9, %ED等等都被传递为%ufffd. 正常编码值 ( %2D, %2E, %27) 都可以正确传递。

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

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

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

4

1 回答 1

3

虽然确实á被编码为U+00E1,但 UTF-8 编码(与 URL 参数相关)是0xC3 0xA1.

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

U+FFFD是 Unicode 替换字符,表示给定的字符值不能以 Unicode 正确编码。

更新:

你的问题有两点。

第一:如何将 Unicode 字符串编码为参数。利用

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

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

Request["q"]

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

于 2013-01-14T21:49:29.313 回答