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 :

Fichier properties et encodage


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
    Mai 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 208
    Par défaut Fichier properties et encodage
    Bonjour,
    j'ai un souci d'encodage pour un export CSV.
    En fait, dans ce fichier, sont récupérés des libellés définis dans un fichier .properties.
    Or lors de mon export, ces libellés apparaissent mal encodés dans Excel, après avoir mis des traces, il s'avère que dès la récupération de ces libellés dans le fichier, l'encodage est mauvais.

    Je charge mon fichier properties de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Properties prop_en = PropertiesLoaderUtils.loadAllProperties(fileName);
    Rien de bien méchant.
    J'ai vu qu'il fallait mettre des caractères en unicode à la place des caractères spéciaux (accents...), mais ça n'a pas résolu mon problème.
    Je précise que en local, je n'ai aucun soucis, et que c'est sur le serveur de tests, qui a un charset UTF-8, que le problème apparait.
    Merci de votre aide.

  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,


    D'où sort cette classe PropertiesLoaderUtils ? Quel est l'encodage des fichiers properties ? (cela devrait être de l'ISO 8859-1)
    Comment tu génères ton fichier CSV ?
    Et en quoi consiste exactement ton problème d'encodage ???

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 208
    Par défaut
    Bonjour et merci de ton aide,
    cette classe vient du package : org.springframework.core.io.support
    Le fichier est bien en ISO 8859-1, j'ai bien remplacé les caractères spéciaux en Unicode.
    Pour le CSV, je diffuse un flux via ce genre de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.write(utf8.getBytes());
    Mais le soucis de codage est avant, au moment où je récupère mes libellés de mon fichier properties de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Properties prop = PropertiesLoaderUtils.loadAllProperties(fileName);
    prop.getProperty("exportDiffDate")
    Quand je fais un log de ça, mes caractères spéciaux sont mal transmis, je récupère :
    Au lieu du mot "écriture".

  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
    Citation Envoyé par Marty000 Voir le message
    Pour le CSV, je diffuse un flux via ce genre de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.write(utf8.getBytes());
    On pourrait avoir le code complet ? Avec l'ouverture du fichier ?
    Quel est le type de la variable "utf8" ?

    Car là ca me fait un peu peur...

    Quand je fais un log de ça, mes caractères spéciaux sont mal transmis, je récupère :
    Au lieu du mot "écriture".
    Comment tu fais ton log ??? Et où ?

    a++

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    ceci ne te convient pas pour chargé tes properties ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Properties p = new Properties();
            Reader fis = new InputStreamReader(new FileInputStream("ton fichier"), "ISO 8859-1");
            p.load(fis);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 208
    Par défaut
    Voici le code de génération du csv, j'ai renommé UTF8 en csv, c'est juste une chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String csv = prop.getProperty("exportDiffDate");
    res.setContentLength (csv.length());
    System.out.println("INITIAL: " + csv);
    res.setContentType("text/csv");
    res.setCharacterEncoding("ISO-8859-1");
    out = res.getOutputStream();
    out.write(csv.getBytes());
    out.close();
    Donc il n'y a pas de création physique de fichier, c'est un flux que j'envoie.
    J'ai essayé différents "setCharacterEncoding" mais pas de changements.

    Merci pour ta réponse rolfone, mais j'ai toujours le problème.

    Quand à mon log, je le mets dans ma fonction de ma couche service, j'ai enlevé cet appel pour voir (ma variable csv qui appelle directement le fichier properties ligne 1), mais j'ai toujours le soucis

  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
    Bon, ben je me suis planté dans ma théorie précédente, on dirait.

    Citation Envoyé par Marty000 Voir le message
    Voici le code de génération du csv, j'ai renommé UTF8 en csv, c'est juste une chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String csv = prop.getProperty("exportDiffDate");
    res.setContentLength (csv.length());
    System.out.println("INITIAL: " + csv);
    res.setContentType("text/csv");
    res.setCharacterEncoding("ISO-8859-1");
    out = res.getOutputStream();
    out.write(csv.getBytes());
    out.close();
    On n'utilise jamais String.getBytes(), parce que Java ne va pas deviner quel encodage tu veux, il prend donc l'encodage par défaut.
    Toi, il te faut getBytes("iso-8859-1").

    Citation Envoyé par Marty000 Voir le message
    J'ai essayé différents "setCharacterEncoding" mais pas de changements.
    Cela est une information que tu envoies à ton interlocuteur qui reçoit la ressource, pas à Java. Tu as déjà donné des bytes, et non pas des Strings ou des chars, à Java. Java pense donc que tu t'es occupé de leur encodage dans le charset qui t'intéresse.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    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 rolfone Voir le message
    ceci ne te convient pas pour chargé tes properties ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Properties p = new Properties();
            Reader fis = new InputStreamReader(new FileInputStream("ton fichier"), "ISO 8859-1");
            p.load(fis);
    Si, mais PropertiesLoaderUtils est très bien et plus facile.
    Le problème n'est pas là. Le problème est sans doute avec le logger, ou alors avec le .properties lui-même, qui n'est peut-être pas dans le bon encodage. (C'est pas parce qu'on me dit "j'ai tout bien fait comme il faut !" que je vais le croire indéfiniment sans le voir.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Encodage fichier properties
    Par Mengué georges dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/06/2009, 09h04
  2. [init] Recupérer un fichier properties et l'utiliser
    Par brousaille dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 13/01/2005, 14h50
  3. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16
  4. [STRUTS] fichier properties indépendant
    Par meufeu dans le forum Struts 1
    Réponses: 5
    Dernier message: 28/07/2004, 16h10
  5. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/10/2003, 17h02

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