jump to navigation

Character decoding Error while retriving parameters in Servlet. August 21, 2008

Posted by ninadgawad in Javascript.
Tags: , , ,
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.