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

Java Discussion :

Problème d'encodage depuis un .jar


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut Problème d'encodage depuis un .jar
    Bonjour,

    je précise que je travaille sous Windows XP.

    J'essaie d'écrire dans un fichier xml avec les méthodes OutputStreamWriter :

    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
     
    public void ecrireElemenr(Element e) throws IOException {
     
    	String corps;
     
    	FileOutputStream fos = new FileOutputStream(Application.REPERTOIRE_DATA + "e_" + e.getId() + ".xml");
        OutputStreamWriter out = new OutputStreamWriter(fos, "ISO-8859-1");
     
        corps = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n\n";
        corps += e.toXml();
     
    	//Ecriture dans le fichier
    	out.write(forceEncodage(corps,"ISO-8859-1"));
     
    	//Fermeture du fichier
    	out.close();
    }

    Cela fonctionne quand je lance l'application depuis Eclipse, mais lorsque que je lance le .jar que j'ai généré, les caractères spéciaux ne sont pas inscrits dans le fichier ( j'ai droit à des é ... ).

    J'ai pourtant vérifié l'encodage du fichier xml avec notepad++.

    De plus voici ma méthode qui force l'encodage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    	// forcer l'encodage en  UTF-8 pour les caractères spéciaux
        private String forceEncodage(String stringXml,String charset) throws CharacterCodingException {
     
            CharsetEncoder encoder = Charset.forName(charset).newEncoder();
            String resultFin = new String(encoder.encode(CharBuffer.wrap(stringXml.toCharArray())).array());
     
            return resultFin;
        }


    J'ai esayé d'écrire dans des fichiers xml en UTF-8 mais j'ai le même problème : ça fonctionne depuis eclipse mais pas depuis mon .jar.


    N'hésitez pas à proposer vos idées pour corriger mon problème.

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par motjoy Voir le message
    N'hésitez pas à proposer vos idées pour corriger mon problème.
    Tu n'as aucun besoin de forceEncodage(). Vire-là.
    Ne mets rien à la place, tu n'en avais pas besoin.

    Soit dit en passant, il est plus facile d'écrire du XML avec les APIs dédiées, qu'en utilisant un Writer.

    (La raison pour laquelle le problème ne se pose pas partout, est que cette méthode se repose sur l'encodage par défaut, qui peut changer suivant l'environnement utilisé.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    En enlevant l'appel à forceEncodage j'ai toujours le même problème.

    Je ne comprend pas la différence qui peut exister entre l'exécution depuis l'environnement Eclipse et l'exécution depuis le .jar

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par motjoy Voir le message
    En enlevant l'appel à forceEncodage j'ai toujours le même problème.
    Prouve-le. Montre le code.

    Citation Envoyé par motjoy Voir le message
    Je ne comprend pas la différence qui peut exister entre l'exécution depuis l'environnement Eclipse et l'exécution depuis le .jar
    Au départ il n'y en a pas, mais il est possible qu'Eclipse et le lanceur Java soient configurés différemment.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu utilise le writer que t'as indiqué en haut et que ta String est correcte à la base, tu n'aura pas de différence, puisqu'il n'y a aucun code qui dépende de l'environnement.

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    si tu utilise le writer que t'as indiqué en haut et que ta String est correcte à la base, tu n'aura pas de différence, puisqu'il n'y a aucun code qui dépende de l'environnement.
    Je n'en suis pas certain, puisque j'affiche l'encodage des fichiers du système et je n'obtiens pas la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JOptionPane.showMessageDialog(null,System.getProperty("file.encoding"), "Attention", JOptionPane.WARNING_MESSAGE);


  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Oui, ça ça dépend de l'environnement.

    Mais le code que tu nous avait montré, en dehors de la méthode forceEncodage(), ne dépend pas de l'environnement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Par défaut
    On m'a suggéré sur un autre site de lancer mon .jar avec un .bat et de mettre en paramètre à la machine virtuelle java un encoding utf-8.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est une solution en effet.

    Une meilleure solution, est de ne pas dépendre de l'encodage par défaut. Raison pour laquelle on te dirige plutôt vers celle-là.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/05/2014, 13h38
  2. Problème encodage depuis une socket
    Par huzard dans le forum Qt
    Réponses: 5
    Dernier message: 20/05/2013, 13h20
  3. Encodage des caractères depuis un jar
    Par Pasokoniidesuka dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 08/07/2010, 14h55
  4. problème encodage depuis migration mysql 5
    Par speedev dans le forum MySQL
    Réponses: 1
    Dernier message: 08/07/2010, 04h30
  5. [JAR]ouverture de fichier texte depuis executables jar
    Par julien31 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/03/2005, 15h53

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