I am having an issue URL decoding a UTF-8 string in Java that is encoded either with Javascript or Actionscript 3. I\'ve set up a test case as follows:
The string in
I have been struggling with this problem for hours on end... My problem was a JQuery Ajax call like:
return $.ajax({
url: '/author!getAuthorContent.action',
type: 'GET',
data : {author:name, 'content_type': ct || 'all', 'start': start || 0}
});
'name' is a String which contains special characters like Jérôme-Serrano
For some reasons the way JS/JQuery was encoding these kind of special characters was incompatible and I couldn't decode it on Java BackEnd...
The solution was:
var econded = encodeURIComponent(name);
String decoded = java.net.URLDecoder.decode(econded ,"UTF-8");
some refetences: http://www.programering.com/a/MjN2ADOwATg.html http://www.theerrormessage.com/2013/10/weird-characters-transmitted-to-and-from-server-through-jquery-ajax-call/
Javascript is URL encoding your string using Latin-1 charset. Java is URL encoding it using UTF-8.
The URL encoding is really just replacing the characters/bytes that it doesn't recognise. For example, even if you were to stick with ASCII characters, (
would be encoded as %28
. You have the additional problem of character sets when you start using non-ASCII characters (any thing longer than 7 bits).
escape is a deprecated function and does not correctly encode Unicode characters. Use encodeURI or encodeURIComponent, the latter probably being the method most suitable for your needs.