De mon expérience URLDecoder.decode
peut échouer s'il y a des caractères non-ASCII dans la chaîne codée. Par exemple, ce code:
URLDecoder.decode("%u017C", "UTF-8"); // %u017C is the result of running in Javascript escape('ż')
lance l'exception suivante:
Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u0"
La meilleure façon de résoudre ce problème que je connaisse (si maladroit) est juste en cours d'exécution Javascript Java :(
String jsEscapedString = "%u017C";
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
String result = (String) engine.eval("unescape('" + jsEscapedString + "')");
solution BTW inspiré par Siva R Vaka's post
Notez que ni JS unescape ni URLDecoder sont R FC-3986 compatible http://www.subbu.org/blog/2008/02/uri-escaping-and-javaneturlencoder –