リクエストをJavaWebサービスに渡すASP.Net(2.0)HTTPハンドラーに送信するJavaScriptリクエストがあります。このシステムでは、アクセント付きの特殊文字などの特殊文字は正しく渡されません。
例えば
- 人間の入力:
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トラブルが始まるところから戻ります。- しかし、(a'?')を
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
QueryStringUTF-8文字セットを使用してURLをデコードします。
補遺:答えが指摘しているように、問題はエンコードほどデコードにありません。JavaScriptでの使用escape()は、UTF-8に従ってエスケープしませんが、使用はエスケープencodeURIComponent()します。