【问题标题】:QueryString converting %E1 to %ufffdQueryString 将 %E1 转换为 %ufffd
【发布时间】:2013-01-14 21:32:28
【问题描述】:

我有如下网址

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。

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

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

【问题讨论】:

  • 也许您只是认为 URL 看起来像这样 %E1,因为它在浏览器的地址栏中显示,但实际上总是像 %ufffd?
  • @UweKeim,我可以直接输入 URL,结果相同。它确实存在于查询字符串中,只是似乎在某个地方被破坏了。
  • iis 请求跟踪是否揭示了一些有用的信息?例如。是否发生重写?或者如何在您的客户端上使用 Microsoft Network Monitor?
  • @UweKeim,跟踪显示� 作为参数的值。差不多就是这样。

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


【解决方案1】:

虽然á 确实编码为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 可以帮助您。 (没试过)

【讨论】:

  • 那么有没有办法让它在 Unicode 中正确编码呢?基本上,我必须针对查询字符串验证哈希码以验证它是否合法。这意味着我需要传递给我的 exact 字符串。我可以进行字符串替换,但我仍然需要先获取正确的值。
  • RawUrl 似乎给了我正确的价值。我想我可以自己拆分 QueryString 并进行解析。谢谢!
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2020-01-03
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多