Character decoding Error while retriving parameters in Servlet. August 21, 2008
Posted by ninadgawad in Javascript.Tags: AJAX, HTML, Javascript, Servlet
21 comments
Problem:
WARNING: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: isHexDigit
Cause:
- Generally we get this error when we try to add special characters like “%, @, $ .. etc” in the GET/POST request from Ajax Call.
- Since these characters are used to URL specific function like “&” id used to differentiate various URL parameters. This generates a “null” value for the parameter you will try to retrieve in Servlet.
Solution:
The simple way to get over this problem is to massage your Special Character String with “escape()” funtion in javascript.
Example:
Before:
var vUserEnteredData = document.formname.textbox.value ; // textbox = 100%
var parameters = “testId=A101&percentageNeeded=” + vUserEnteredData;
// Some Ajax Code …..
request.setRequestHeader( ‘Content-Type’, ‘application/x-www-form-urlencoded; charset=UTF-8’ );
request.setRequestHeader(“Content-length”, parameters.length);
request.setRequestHeader(“Connection”, “close”);
request.send(parameters);
// Note: Here the “%” will cause java.io.CharConversionException: while retriving the percentageNeeded parameter in Servlet.
After:
var vUserEnteredData = document.formname.textbox.value ; // textbox = 100%
var parameters = “testId=A101&percentageNeeded=” + escape(vUserEnteredData);
// Some Ajax Code …..
request.setRequestHeader( ‘Content-Type’, ‘application/x-www-form-urlencoded; charset=UTF-8’ );
request.setRequestHeader(“Content-length”, parameters.length);
request.setRequestHeader(“Connection”, “close”);
request.send(parameters);
Alternate Solution:
- We can use Ajax Frameworks rather than manually making the Ajax Request like PrototypeJS, DWR etc.