我有一个JavaScript请求转到ASP.Net(2.0)HTTP处理程序,该处理程序将请求传递给java web服务。在这个系统中,特殊字符(如带有重音的字符)不能正确传递。使用.Net http处理程序编码变音符号时遇到问题
E.G.
- 人力输入:
Düsseldorf
- 成为一个JavaScript非同步请求
http://site/serviceproxy.ashx?q=D%FCsseldorf
,这是有效的ISO-8859-1,以及在UTF-8,据我可以告诉。 (除非它是UTF-8中的%c3%bc) HttpContext.Current.Request.QueryString.Get("q")
返回D�sseldorf
这是麻烦开始的地方。- 但
HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.GetEncoding("ISO-8859-1"))
回报D%3fsseldorf
(一个“?”) - 和
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
和使用UTF-8字符集解码URL的QueryString
。
附录:正如答案所指出的那样,麻烦并不在于解码和编码;在JavaScript中使用escape()
不会根据UTF-8转义,而使用encodeURIComponent()
。
在这里我正在寻找一种方法来告诉escape()我想使用UTF-8。我没有想到看encodeURIComponent()。另外我误解了UTF-8,并认为%FC可能对两者都有效。 – dlamblin 2008-11-26 16:43:26