我对此进行了进一步研究,并相信我知道是什么原因造成的:HTTP 客户端正在向服务器提交一个 URL 编码不正确的 URL。具体来说,URL 中有无效字符。
要复制,请将 URL 末尾的以下内容粘贴到 IE8 中:default.aspx?p=´
如果您检查通过线路传输的字节(例如使用Fiddler),您会看到实际的十六进制 B4 字符正在 URL 中从客户端发送到服务器。这是 URL 中的非法字符,因为 URL 仅限于 0x80 以下的字符代码(任何大于 0x80 的字符代码都必须进行百分比转义)。
因此,您的客户端传入了一个无效字符,并且您的服务器正在(正确地)用 %EF%BF%BD 替换虚假字符,这是Unicode 替换字符 (U+0FFD)的 UTF-8 编码,这就是发生的情况当遇到在本地编码中没有等效的字符时。
AFAIK,这是 IE 中的一个错误。如果您在 Firefox 中键入相同的 URL,Firefox 将正确地对 URL 进行编码(作为 %b4 而不是 ´)。请注意,同样 AFAIK,仅当手动将无效字符粘贴到 IE 的地址栏中时才会出现问题——如果链接中存在相同的字符,则 IE 似乎正确编码了 URL(至少在我测试的情况下)。
所以你应该弄清楚是谁向你发送了这个虚假的 URL,并告诉他们开始正确编码他们的 URL!