我遇到了同样的问题,当在网络上传输数据时。
提供抛出异常URLDecoder: Illegal hex characters in escape (%)
的示例代码。
以下是传递字符串'Yash %'
的示例Ajax代码:
var encodedData = encodeURIComponent('Yash %');
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "https://yash.ssl.com:8443/ServletApp/test", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("data="+encodedData);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
console.log("data uploaded successfully :: ");
}
};
接受POST请求的Servlet代码。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
System.out.println(" ===== ------ ===== /test | " + request.getParameter("data"));
String networkData = URLDecoder.decode( request.getParameter("data"), "UTF-8");
System.out.println("Ajax call data : "+ networkData);
} catch (Exception ex) {
ex.printStackTrace();
}
}
正如 @Marcelo Rebouças
建议的,在解码字符串之前,我正在对其进行编码。
Java URLDecoder
类 « 字符“%”是允许的,但被解释为特殊转义序列的开始。
Javascript URL 函数 encodeURI() 和 encodeURIComponent()
String stringEncoded = URLEncoder.encode( request.getParameter("data"), "UTF-8");
String networkData = URLDecoder.decode( stringEncoded, "UTF-8");