IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Transformation entity html en code utf8


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Par défaut Transformation entity html en code utf8
    Bonjour,

    Je possède un ensemble de traduction sous forme de fichier de propriété contenant des codes è ou caractères & # 966;

    Je souhaites maintenant migrer ces données en BDD. Je ne peux pas mettre en base directement ces entity car le taglib que j'utilise pour l'affichage necessite de l'utf-8.

    Existe-t-il une classe java (ou une méthode rapide) qui tranforme è en é.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Jakarta Commons Lang propose cela via la classe StringEscapeUtils.

    Sinon cela doit être faisable avec une petite regexp

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Par défaut merci
    je vais regarder cette classe.

    Sinon la regexp ne pourrait pas fonctionner car il n'y a pas que les entité html comme é ou è que je souhaites tranformer mais aussi toutes les lettres d'un alphabet d'une autre langue comme le grec ou japonais que je possede en code & # 974;

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Par défaut pb
    Je viens de tester la classe java.
    Cela fonctionne à moitié.

    tous mes é ou à sont bien remplacés par é ou è
    Mais tous les codes "& # 922;" sont remplacés par "?"

    C'est domage, cette solution me plaisait bien

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Haplo2006
    tous mes é ou à sont bien remplacés par é ou è
    Mais tous les codes "& # 922;" sont remplacés par "?"
    Justement ca marche ! Mais tu ne dois pas avoir la bonne police pour afficher ce caractère !!!

    Essaye avec è qui est l'équivalent de è

    a++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Par défaut cela fonctionne
    Un grand merci pour ton aide.
    J'ai trouvé une solution qui fonctionne.

    J'utilise la méthode que tu m'as fournis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String newVal = StringEscapeUtils.unescapeHtml("maChaineATransformer")
    Ensuite, dans mon code, je stockais le resultat dans un fichier csv pour pouvoir utiliser un script d'insertion en base. Pour inserer la valeur dans mon fichier de sortie, j'utilisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileOutputStream out = new FileOutputStream(fileName.toString());
    PrintStream csvOutputStream = new PrintStream(out);
    csvOutputStream.println(newVal);
    Le problème de cette méthode est que tous mes codes & # 966; etaient transformé en "?"

    J'ai donc précisé le charset "UTF-8" dans mon printStream, et cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileOutputStream out = new FileOutputStream(fileName.toString());
    PrintStream csvOutputStream = new PrintStream(out,true,"UTF-8");
    csvOutputStream.println(newVal);
    Encore merci.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Haplo2006
    Sinon la regexp ne pourrait pas fonctionner car il n'y a pas que les entité html comme é ou è que je souhaites tranformer mais aussi toutes les lettres d'un alphabet d'une autre langue comme le grec ou japonais que je possede en code & # 974;
    Justement non car l'expression régulière est bien plus simple à mettre en oeuvre pour les codes que pour les labels comme é ou è.

    Je m'explique : l'expression régulière doit simplement rechercher les entité HTML, donc ceci peut faire l'affaire : "&(.+?);" (les parenthèse servent seulement à récupérer la valeur de l'entité plus facilement.

    A partir de là on a deux cas possible : soit on a affaire à un code (donc # suivit de chiffres seulement), qui correspond au code ISO du caractères : il suffit donc de le convertir en entier puis en char...

    Soit on a affaire à un nom (egrave par exemple), et alors là on doit gérer une table de correspondance pour retrouver la bonne valeur...


    Exemple avec les regexps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    	public static String resolveEntities(String str) {
    		// Pattern représentant la partie 'code' :
    		Pattern codePattern = Pattern.compile("#[0-9]+");
     
    		// Pattern représentant une entité HTML :
    		Pattern pattern = Pattern.compile("&(.+?);");
    		Matcher matcher = pattern.matcher(str);
     
    		// On recherche la première entité HTML
    		if (matcher.find()) {
    			// On crée un StringBuffer qui comportera la chaine modifié :
    			StringBuffer buffer = new StringBuffer(str.length());
     
    			do {
    				String replacement;
     
    				// On récupère la valeur :
    				String entity = matcher.group(1);
     
    				// Si cela correspond à un code #123,
    				// On converti le nombre en entier, puis en caractère :
    				if (codePattern.matcher(entity).matches()) {
    					char c = (char) Integer.parseInt(entity.substring(1));
    					replacement = Character.toString(c);
    				} else {
    					// Sinon on recherche l'association selon le nom
    					replacement = getEntitiesValues(entity);
    					if (replacement==null) {
    						// Si on ne trouve pas d'association,
    						// on ne modifie rien
    						replacement = matcher.group();
    					}
    				}
    				// On ajoute dans le buffer en effectuant le remplacement :
    				matcher.appendReplacement(buffer, replacement);
    			} while(matcher.find());
    			matcher.appendTail(buffer);
    			return buffer.toString();
    		}
    		return str;
    	}
    Pour fonctionner complètement, cette méthode nécessite une seconde méthode getEntitiesValues() qui retourne la valeur d'une entité selon son nom (ex: pour egrave retourne è) ou null s'il n'y a aucune correspondance...

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer un tableau en code HTML
    Par DenisACF01 dans le forum Langage
    Réponses: 8
    Dernier message: 06/08/2014, 10h00
  2. [VB.NET] Transformation XML -> HTML
    Par marsu381 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 27/09/2005, 10h38
  3. [XSLT] [XML->HTML] transformation XML -> HTML via XSL
    Par Great Sayaman dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2004, 22h12
  4. transformer du html en xml
    Par biboo dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/08/2004, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo