2009-03-01 8 views
36

Je souhaite convertir certains caractères HTML en texte à l'aide de Java Standard Library. Je me demandais si n'importe quelle bibliothèque atteindrait mon but?Conversion d'un caractère HTML en texte à l'aide de la bibliothèque Java standard

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 

    // "Happy & Sad" in HTML form. 
    String s = "Happy & Sad"; 
    System.out.println(s); 

    try { 
     // Change to "Happy & Sad". DOESN'T WORK! 
     s = java.net.URLDecoder.decode(s, "UTF-8"); 
     System.out.println(s); 
    } catch (UnsupportedEncodingException ex) { 

    } 
} 

Répondre

53

Je pense que les méthodes StringEscapeUtils.escapeHtml() et unescapeHtml() de Jakarta Commons Lang sont ce que vous cherchez. Voir http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html.

+1

Mise à jour de l'url : http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringEscapeUtils.html – Reu

+0

Ne pas battre un cheval mort, mais ce que le PO demandait était de savoir comment traduire entre les entités HTML et "plain" texte (qui est ASCII pour moi, mais YMMV). La librairie Jakarta ci-dessus a unescapeHTML (et escapeHTML), ce qui fait l'affaire. URLDecoder fonctionne toujours pour les chaînes d'URL codées en pourcentage (comme les paramètres GET). – jjohn

+0

Comment même prendra en charge en cas d'Android, une idée? – CoDe

2

Je ne connais aucun moyen de le faire en utilisant la bibliothèque standard. Mais je connais et utilise cette classe qui traite des entités html.

"HtmlEntities est une classe Open Source Java qui contient une collection de méthodes statiques (htmlentities, unhtmlentities, ...) pour convertir des caractères spéciaux et étendus en HTML entitities et vice versa."

http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=htmlentities

7

java.net.URLDecoder traite uniquement avec le format application/x-www-form-urlencoded MIME (par exemple "20%" représente l'espace), et non avec HTML character entities. Je ne pense pas qu'il y ait quelque chose sur la plate-forme Java pour cela. Vous pourriez écrire votre propre classe d'utilité pour faire la conversion, comme this one.

5

Le décodeur d'URL ne doit être utilisé que pour décoder des chaînes à partir des URL générées par des formulaires html qui sont dans le type "application/x-www-form-urlencoded" mime. Cela ne supporte pas les caractères html. Après search, j'ai trouvé une classe Translate dans la bibliothèque HTML Parser.

+0

très bonne bibliothèque, maintenant il est facile de faire quelque chose comme Miguel

24

Ici, vous devez simplement ajouter le fichier jar dans lib jsoup dans votre application, puis utiliser ce code.

import org.jsoup.Jsoup; 

public class Encoder { 
    public static void main(String args[]) { 
     String s = Jsoup.parse("<Français>").text(); 
     System.out.print(s); 
    } 
} 

Lien pour télécharger jsoup: http://jsoup.org/download

+0

Ceci devrait être la réponse acceptée. Aucune autre bibliothèque n'est plus rapide ou plus facile à importer que l'incroyable Jsoup. – Grux

+0

Génial. C'est réponse. –

0

Comme @jem suggéré, il est possible d'utiliser jsoup.

Avec jSoup 1.8.3, il est possible d'utiliser la méthode Parser.unescapeEntities qui conserve le code html d'origine.

import org.jsoup.parser.Parser; 
... 
String html = Parser.unescapeEntities(original_html, false); 

Il semble que dans certaines versions précédentes, cette méthode ne soit pas présente.

1

Vous pouvez utiliser la classe org.apache.commons.lang.StringEscapeUtils:

String s = StringEscapeUtils.unescapeHtml("Happy & Sad") 

Il travaille.

+0

Je préfère cette solution. Lorsque cela est possible, je suggère d'utiliser les librairies Apache. (mon avis) –