我正在尝试从asp.net应用程序发送请求到像这样的url“http://mysite.dk/tværs?test=æ”,但我在正确编码查询字符串方面遇到了麻烦。或者说,查询字符串已经正确编码,我连接的服务只是无法正确理解它。
我尝试使用不同的浏览器发送请求并使用Wireshark记录它们如何编码请求,结果如下:
Firefox: http://mysite.dk/tv%C3%A6rs?test=%E6 Ie8: http://mysite.dk/tv%C3%A6rs?test=\xe6 Curl: http://mysite.dk/tv\xe6rs?test=\xe6
Firefox、IE和Curl都从服务接收到了正确的结果。请注意,它们以不同的方式对丹麦特殊字符“æ”进行编码。
当我使用HttpWebRequest从我的asp.net应用程序发送请求时,URL被编码为:
http://mysite.dk/tv%C3%A6rs?test=%C3%A6
它将查询字符串与路径部分一样进行编码。远程服务无法理解此编码,因此我没有得到正确的答案。
顺便说一下,“æ”(U+00E6)在ISO-LATIN-1中为%E6,在UTF-8中为%C3%A6。
我可以更改远程服务以接受UTF-8编码的查询字符串,但那样服务将无法在浏览器中正常工作,我不太感兴趣。有没有一种方法可以指定.NET不应使用UTF-8对查询字符串进行编码?
我是这样创建webrequest的:
我尝试使用不同的浏览器发送请求并使用Wireshark记录它们如何编码请求,结果如下:
Firefox: http://mysite.dk/tv%C3%A6rs?test=%E6 Ie8: http://mysite.dk/tv%C3%A6rs?test=\xe6 Curl: http://mysite.dk/tv\xe6rs?test=\xe6
Firefox、IE和Curl都从服务接收到了正确的结果。请注意,它们以不同的方式对丹麦特殊字符“æ”进行编码。
当我使用HttpWebRequest从我的asp.net应用程序发送请求时,URL被编码为:
http://mysite.dk/tv%C3%A6rs?test=%C3%A6
它将查询字符串与路径部分一样进行编码。远程服务无法理解此编码,因此我没有得到正确的答案。
顺便说一下,“æ”(U+00E6)在ISO-LATIN-1中为%E6,在UTF-8中为%C3%A6。
我可以更改远程服务以接受UTF-8编码的查询字符串,但那样服务将无法在浏览器中正常工作,我不太感兴趣。有没有一种方法可以指定.NET不应使用UTF-8对查询字符串进行编码?
我是这样创建webrequest的:
var req = WebRequest.Create("http://mysite.dk/tværs?test=æ") as HttpWebRequest;
但是问题似乎源于System.Uri,它显然在WebRequest.Create中被使用:
var uri = new Uri("http://mysite.dk/tværs?test=æ");
// now uri.AbsolutePath == "http://mysite.dk/tv%C3%A6rs?test=%C3%A6"
http://mysite.dk/tv%C3%A6rs?hest=%C3%A6
的 ASP.NET 代码是什么? - Hari Pachuveetil