IE发送?HTTP GET中的字符而不是Unicode字符

Sae*_*ati 2 browser unicode internet-explorer-9

我在我的一个项目中创建了一个用于搜索操作的Web表单,HTML非常简单:

<form action='/search' method="post">
    <input type="text" id='search-term' name='search-term' />
    <input type="submit" id='start-search' alt='' value="" />
</form>
Run Code Online (Sandbox Code Playgroud)

因此,当用户键入Unicode搜索词并按Enter键时,将使用以下URL将HTTP Get请求发送到服务器:

http://www.example.com/search?search-term=????
Run Code Online (Sandbox Code Playgroud)

这在服务器中将是:

http://www.example.com/search?search-term=%D9%85%D8%AB%D8%A7%D9%84
Run Code Online (Sandbox Code Playgroud)

我能够检索search-term查询字符串的解码值,使用HttpContext.Current.Server.UrlDecode("%D9%85%D8%AB%D8%A7%D9%84")它返回????给我.直到这里一切正常,我没有问题.

但是,如果有人直接在IE9中输入上述地址,然后点击Enter,那么我在服务器上获得的是:

http://www.example.com/search?search-term=????
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

更新:我们通过Fiddler检查了流量,您可以在以下图片中看到结果:

HTTP获取由Fiddler捕获的标头,用Firefox请求 HTTP获取由Fiddler捕获的标头

HTTP获取由Fiddler捕获的标头,用IE请求 HTTP获取由Fiddler捕获的标头

Rem*_*eau 5

IE手动输入URL时不知道要使用哪种字符集,因此必须使用默认字符集.?Unicode字符转换为不支持这些Unicode字符的Ansi字符集时出现字符.当提交webform时,IE使用webform的charset,它可以由<form>标签本身,<meta>HTML文档中的标签或HTTP Content-Type标头指定,因此IE必须猜测使用正确的字符集的可能性较小.