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 encodage File#getName


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut Problème encodage File#getName
    Bonjour à tous,

    Je ne parviens pas à encoder correctement les accents dans les noms de fichier/répertoire sur un système Windows (pas encore testé sous X).

    Voici ce que j'obtiens quand j'encode mes noms de fichier :
    La réforme managériale et sécuritaire de l’école.pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected String encode(String value) {
    	try {
    //		byte[] ansiBytes = new Base64().decode(value.getBytes());
    		byte[] ansiBytes = value.getBytes();
    		String unicode = new String(ansiBytes, "windows-1252");      // Cp1252
    		byte[] utfBytes = unicode.getBytes("UTF-8");
    		return new String(utfBytes);
     
    	} catch (UnsupportedEncodingException e) {
    		logger.debug("Erreur de décodage", e);
    		return value;
    	}
    }
    Je fais certainement quelque chose à l'envers... mais quoi ?
    Merci d'avance pur vos lumières.

  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,


    Le code que tu donnes ne veut rien dire : tu fais des transformations bizarroïdes qui ne donneront rien de bon !


    Une String n'est pas associé à un encodage. Elle utilise toujours l'UTF-16, donc tu n'as pas à l'encoder !

    Soit elle est correct et tu l'utilises directement.
    Soit elle ne l'est pas et le problème se trouve avant...


    Bref ta méthode encode() ne sert à rien, au contraire il se pourrait que ce soit la source de ton problème

    a++

  3. #3
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut
    Effectivement, c'est lorsque j'écris cette String dans un fichier XML (UTF-8) que les caractères sont abimés. J'essaye de palier ce pb en passant de UTF-16 à UTF-8 sans heurs.
    Après, je suis un peu parti en vrille sur d'autres encodages, n'étant pas parvenu à mes fins sur la base de l'algorithme ci-dessus...

  4. #4
    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
    Pas besoin de bidouiller comme cela. Il suffit de préciser l'encodage à l'ouverture du fichier.

    Montres ton code et on pourra t'aider; )


    a++

  5. #5
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut
    Voici le code d'écriture. Le fichier est ouvert par d'autres applications, je ne pense pas que ça soit un problème de lecture dans mon code Java.

    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
    private static DocumentBuilder db;
    static {
    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    	dbf.setIgnoringElementContentWhitespace(true);
    	try {
    		db = dbf.newDocumentBuilder();
    	} catch (ParserConfigurationException e) {
    		e.printStackTrace();
    	}
    }
    ...
    Document xmlDoc = db.newDocument();
    ...
    try {
    	// cf. http://java.developpez.com/faq/xml/?page=dom#XML_DOM_to_string
    	TransformerFactory transFactory = TransformerFactory.newInstance();
    	Transformer transformer = transFactory.newTransformer();
    	transformer.transform(new DOMSource(xmlDoc), new StreamResult(target));
    } catch (TransformerException e) {
    	logger.fatal("Erreur d'écriture du document : " + target.getPath(), e);
    	System.exit(1);
    }
    Je précise que mon Workspace est déclaré en UTF-8 et que je lance mon application avec le paramètre JVM -Dfile.encoding=UTF8.

  6. #6
    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 tooms4444 Voir le message
    Je précise que mon Workspace est déclaré en UTF-8 et que je lance mon application avec le paramètre JVM -Dfile.encoding=UTF8.
    Il est préférable de préciser l'encodage dans le code source plutôt que de redéfinir file.encoding (ce qui pourrait avoir des effets néfastes).


    Quel est le type de target ? java.io.File ?
    Dans ce cas il est préférable d'ouvrir explicitement un InputStreamReader afin de préciser l'encodage...


    Enfin il faudrait voir comment tu construis ton document avec DocumentBuilder... Le problème pourrait se situer à ce niveau.



    Un seul petit défaut d'encodage peut te pourrir tout un code


    a++

    PS : hors-sujet mais... pourquoi ton DocumentBuilder est en static ????

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/09/2006, 20h20
  2. problème require_once('file.php') avec 2 repertoires.
    Par vacknov dans le forum Langage
    Réponses: 5
    Dernier message: 22/08/2006, 16h35
  3. [DOM] Problème encodage
    Par spilliaert dans le forum Format d'échange (XML, JSON...)
    Réponses: 19
    Dernier message: 05/06/2006, 16h26
  4. Probléme encodage caractéres spéciaux MYSQL
    Par FoxLeRenard dans le forum Installation
    Réponses: 1
    Dernier message: 20/02/2006, 12h10
  5. Réponses: 1
    Dernier message: 02/02/2006, 23h12

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