Asp.net Internet Explorer 9中URL查询字符串值的UTF-8字符编码问题
当我试图显示URL查询字符串中提供的特殊字符(德语重音字符)时,我在InternetExplorer中发现了一个奇怪的问题,特别是IE9这在Firefox和Chrome中正常工作。 例如,我正在使用的URL如下所示:Asp.net Internet Explorer 9中URL查询字符串值的UTF-8字符编码问题,asp.net,internet-explorer,encoding,utf-8,query-string,Asp.net,Internet Explorer,Encoding,Utf 8,Query String,当我试图显示URL查询字符串中提供的特殊字符(德语重音字符)时,我在InternetExplorer中发现了一个奇怪的问题,特别是IE9这在Firefox和Chrome中正常工作。 例如,我正在使用的URL如下所示: http://mysite.com/TestPage.aspx?Title=Hochauflösendes® 我还尝试了URL的URL编码版本: http://mysite.com/TestPage.aspx?Title=Hochaufl%C3%B6sendes%C2%AE 在
http://mysite.com/TestPage.aspx?Title=Hochauflösendes®
我还尝试了URL的URL编码版本:
http://mysite.com/TestPage.aspx?Title=Hochaufl%C3%B6sendes%C2%AE
在任何一种情况下,当我试图使用Request.QueryString[“Title”]
在页面上显示该“Title”查询字符串值时,IE无法正确显示字符:
Hochaufl�sendes�
如果我直接在页面上硬编码文本,它将在所有浏览器上正确显示。只有在从出现问题的查询字符串中提取文本时才会显示
页面保存为UTF-8编码,我在页面中根据需要添加meta
标记:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
我还通过Fiddler查看了页面的标题和内容,所有的编码都是正确的
是什么导致IE不能正确显示特殊字符?正如亚里士多德所建议的,使用
HttpContext.Current.Request.RawUrl
对我的情况有效
要从RawUrl检索实际查询字符串值,可以使用以下简单方法:
private string GetQueryStringValueFromRawUrl(string queryStringKey)
{
var currentUri = new Uri(HttpContext.Current.Request.Url.Scheme + "://" +
HttpContext.Current.Request.Url.Authority +
HttpContext.Current.Request.RawUrl);
var queryStringCollection = HttpUtility.ParseQueryString((currentUri).Query);
return queryStringCollection.Get(queryStringKey);
}
使用此方法检索值在IE8和IE9中进行了测试。这个错误在IE10中已经修复。我不记得为什么了,但我有同样的问题,通过手动从
HttpContext.Current.Request.RawUrl
中提取参数来解决。通过手动,我的意思是我已经创建了一个自定义函数,可以获取RawUrl并提取参数,而不使用QueryString。@亚里士多德,这是一个值得尝试的好主意。我确实找到了,它探索了获取值的不同方法,但也表明这可能是IE中的一个错误,尽管这是2009年的错误。@Aristos使用HttpContext.Current.Request.RawUrl
有效。然后,我使用中找到的方法检索值。然后我建议您对其进行回答,并描述如何解决它。我刚刚尝试过。输入值“iiiĞĞĞiiiŞŞ”输出值“iiiÞÞððÐД浏览器上一个ie版本。