我有一个JavaScript请求去ASP.Net (2.0)HTTP处理该通行证的请求java网服务。在这个系统中的特殊人物,例如那些有口音得不到通过在正确的。

E.G.

  • 人输入: Düsseldorf
  • 成为一个JavaScript asynch请求 http://site/serviceproxy.ashx?q=D%FCsseldorf, ,这是有效的ISO-8859-1,以及在UTF-8尽我所能告诉。(除非它%c3%bc UTF-8)
  • HttpContext.Current.Request.QueryString.Get("q") 返回 D�sseldorf 这就是麻烦的开始。
  • HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.GetEncoding("ISO-8859-1")) 返回 D%3fsseldorf (a'?')
  • HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.UTF8) 返回 D%ef%bfsseldorf

因此,它的价值没有得到解码,也没有重新编码准确地传递给java服务。

  • 注意到 HttpContext.Current.Request.Url.Query?q=D%FCsseldorf&output=json&from=1&to=10
  • 同时 HttpContext.Current.Request.QueryString.ToString()q=D%ufffdsseldorf&output=json&from=1&to=10

这是为什么,以及如何可以告诉我 HttpContext 到荣幸的请求头,其中包括:

Content-Type=application/x-www-form-urlencoded;+charset=UTF-8

和解码的网址 QueryString 使用UTF-8charset。

增编:作为回答指出的那样,麻烦在于没有那么多在解码的编码;使用 escape() 在JavaScript不逃避根据UTF-8,同时使用 encodeURIComponent() 不。

有帮助吗?

解决方案

我不知道什么是默认字符编码使用的服务器(IIS?) 是的,或者如果它是可以改变的,但我可以告诉你一些东西,可能会有帮助。

0xFC是ISO-8859-1编码u.同时Unicode码点U+00FC,当编码与UTF-8,这需要两个字节,并成为0xC3 0xBC.

如果一个UTF-8的解码看到字节的序列非法0xFC,它会进行解码它作为一个Unicode"替换角色",U+FFFD,拿起它在哪里看到的另一个开始有效字节的顺序,在这种情况下's'。

因为你得到 %3f 是的,'?'是"替换角色"的拉丁文字符组,类似于�在Unicode character set.

我相信你看到的是客户编码与ISO-8859-1,但是服务器解与UTF-8。尽快命的服务器、数据被破坏。我建议你修改的用户UTF-8编码;它应请求 http://site/serviceproxy.ashx?q=D%C3%BCsseldorf

这听起来像你这样正在建设这些网址从JavaScript,因此应使用的 encodeURIencodeURIComponent 功能,不 escape.

其他提示

我得到的同样的问题ASP.NET 通用处理程序时,该网址是直接输入到IE8.人物正在送过为char65533,但我有IE8集

[x] Send UTF-8 URLs.

在我的情况下,我要调试一个HTTP处理在视觉和打字工作室的地址的处理程序直接进入浏览器:

 http://localhost/myHandler.ashx?term=xxxxxx

然后逐步通过代码。客户将通过UTF-8网址的编码,但是没有一种方法来调试代码时,IE8上运行的发展机是客户吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top