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 :

Encodage UTF-8 d'un String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Par défaut Encodage UTF-8 d'un String
    Bonjour,

    Je génère un fichier XML encodé en UTF8 dont le résultat doit être le suivant :

    <?xml version="1.0" encoding="UTF-8" ?>
    <content>société</content>
    C'est un exemple simplifié

    Je pense qu'il faut que j'encode les chaines de caractère en UTF-8 car sans encodage le résultat dans IE est le suivant :

    Un caractère incorrect a été trouvé dans un contenu de texte. Erreur de traitement de la ressource file:///C:/Temp/testUTF8...

    soci
    Le browser detecte un "é" non encodé en UTF-8.

    Et.......... je n'arrive pas à encoder la chaine de caractère en UTF-8
    Voici mon code java de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		String content="société";
    		byte pcontent[] = content.getBytes("iso-8859-1"); 
    		String valeurUTF8 = new String(pcontent, "UTF-8");
     
    		FileWriter fw = new FileWriter("c://Temp//testUTF8.xml", false);
    		BufferedWriter output = new BufferedWriter(fw);
    		output.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    		output.write("<content>\n");
    		output.write(valeurUTF8);
    		output.write("</content>\n");
    		output.flush();
    Le résultat dans IE donne :
    <?xml version="1.0" encoding="UTF-8" ?>
    <content>?</content>
    Un byte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte pcontent[] = content.getBytes();
    donne la même chose.

    Malgrès les nombreux lien sur le sujet, je ne trouve pas la solution.

    Ma question : Auriez-vous des pistes pour arriver à encoder une chaine de caractère en UTF-8 ?

  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,


    Citation Envoyé par ouioui2000 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		String content="société";
    		byte pcontent[] = content.getBytes("iso-8859-1"); 
    		String valeurUTF8 = new String(pcontent, "UTF-8");
    Ca c'est juste du n'importe quoi.
    Déjà une String en Java n'est associé à aucun encodage en particulier.

    Ensuite tu récupères les données encodé en iso-8859-1, que tu lis en utf-8 !!!
    C'est normal que cela ne donne rien de bon.


    Un String n'est pas lié à un encodage. S'il y a un problème d'encodage cela vient soit de la manière de lire ou écrire les données, pas de la String elle même !





    Ton problème vient du fait que tu ne spécifies pas l'encodage de ton fichier.
    donc cela utilise l'encodage par défaut (qui ne correspond pas à utf-8 sous Windows).


    Il faudrait faire quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	String content="société";
    	Writer output = new BufferedWriter(
    			new OutputStreamWriter(
    					new FileOutputStream("c:/Temp/testUTF8.xml", false), "utf-8"));
    	try {
    		output.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    		output.write("<content>\n");
    		output.write(content);
    		output.write("</content>\n");
    		output.flush();
    	} finally {
    		output.close();
    	}

    Ou bien à partir de Java 7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	String content="société";
    	Path file = Paths.get("c:/Temp/testUTF8.xml");
    	try (Writer output = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) {
    		output.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    		output.write("<content>\n");
    		output.write(content);
    		output.write("</content>\n");
    		output.flush();
    	}

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Par défaut
    Un grand merci. Tu m'a remis dans le droit chemin Yoda.
    Parfois les choses les plus simple sont les plus compliqués.

Discussions similaires

  1. Encodage UTF-8 enlève les accents d'un String
    Par Marc_27 dans le forum Langage
    Réponses: 11
    Dernier message: 06/11/2014, 17h48
  2. [Encodage utf-8]conversion d'un String en utf-8
    Par noOneIsInnocent dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2007, 15h19
  3. [C# 2.0] Comment réaliser un encodage UTF-8 ?
    Par StormimOn dans le forum C#
    Réponses: 2
    Dernier message: 18/10/2006, 10h35
  4. Pb Encodage UTF-8 pour Ooo
    Par Sylvain James dans le forum XMLRAD
    Réponses: 10
    Dernier message: 08/03/2006, 22h28
  5. [WebForms] Encodage, UTF-8 et accents
    Par alexischmit dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 28/04/2004, 12h21

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