Javaでは、HTTP Postを使用してリクエストをサーバーに送信する必要がありますが、URLのパラメーターに特殊文字が含まれていると、例外の下にスローされます
Java.lang.IllegalArgumentException:URLDecoder:エスケープ(%)パターンで不正な16進文字-入力文字列の場合: "& '"
データを送信するコード
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL);
String sessionId = RequestUtil.getRequest().getSession().getId();
String data = arg.getData().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(param1, data));
params.add(new BasicNameValuePair(param2, sessionId));
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = (HttpResponse) httpclient.execute(httpPost);
サーバー側では、以下のコードを使用して情報を読み取ります
String data = request.getParameter(param1);
if (data != null) {
actionArg = new ChannelArg(URLDecoder.decode(data, "UTF-8"));
}
コードは正しく機能しますが、[aああ#$%& '(<>?/。、あああああ])のような特殊文字を入力すると、例外がスローされます。特殊文字をデコードしますか?
事前にどうもありがとうございました。
残念ながらURLエンコーダーは問題を解決しません。この問題が発生し、カスタムユーティリティを使用しました。私はググリングから得たこれを覚えています;).
インターネットを安全に通過できるようにテキストをエンコードするには:
import Java.net.*;
...
try {
encodedValue= URLEncoder.encode(rawValue, "UTF-8");
} catch (UnsupportedEncodingException uee) { }
そしてデコードする:
try {
decodedValue = URLDecoder.decode(rawValue, "UTF-8");
} catch (UnsupportedEncodingException uee) { }
String data = request.getParameter(param1);
これが サーブレットAPI の場合、パラメータはすでにデコードされています。パーセントエンコーディングをこれ以上処理する必要はありません。
私はHttpClientを使用していませんが、ヘッダーでエンコードを送信していることを確認してください:
Content-type: application/x-www-form-urlencoded; charset=UTF-8
または、必要に応じて、getParameter
を呼び出す前に既知のエンコーディングを設定します:
request.setCharacterEncoding("UTF-8");
グアバを試す
com.google.common.net.UrlEscapersを使用します
中国語でうまくいきます
このような:
Escaper escaper = UrlEscapers.urlFragmentEscaper();
String result = escaper.escape(yoururl);