2011-11-25 5 views
2

Y at-il une fonction dans le langage de programmation Java qui est équivalente à la fonction JavaScript unescape? C'est-à-dire, si mon entrée est la chaîne "I% 20need% 20help% 21" la sortie doit être "j'ai besoin d'aide!", Par exemple.Java équivalent à la fonction JavaScript unescape

Merci!

+0

Notez que ni JS unescape ni URLDecoder sont R FC-3986 compatible http://www.subbu.org/blog/2008/02/uri-escaping-and-javaneturlencoder –

Répondre

4

Vous pouvez utiliser URLDecoder. En supposant que vous utilisez UTF-8:

String result = URLDecoder.decode(s, "UTF-8"); 
+3

Il est à noter que 'java.net.URLDecoder.decode (String s)' est obsolète. –

+0

vous devez indiquer le codage char aussi bien – Nrj

+0

Merci. Fixé (devinant UTF-8). –

1

Essayez cette

URLDecoder dec = new URLDecoder(); 
     String val = dec.decode("I%20need%20help%21","UTF-8"); 
     System.out.println(val); 
0

C'est bien @Nrj, mais les développeurs sont à l'invoquer statiquement.

URLDecoder.decode("I%20need%20help%21","UTF-8"); 
6

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