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 :

encodage et accent


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut encodage et accent
    Bonjour,
    Traduisant une application d'anglais à français, je me suis retrouvé face à un problème : les accents sont mal affichés!
    J'imagine que c'est un problème d'encodage mais je ne vois pas ce que je dois faire. Pour info, toutes mes strings que je veux afficher sont dans un fichier properties édités sous gedit (linux/gnome). Et il est sauvegardé sous UTF8.
    Que dois je changer ? L'encodage de mon fichier, ou faut il preciser quelque chose à la jvm ?
    D'avance merci

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Comme l'indique le javadoc de Properties, l'encoding des fichiers de properties est ISO-8859-1. Il y a le système d'escape habituel si ça ne convient pas.

    Je présume que tes problèmes viennent de ce que tu sauvegardes tes fichiers en UTF-8 ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    J'imagine que c'est cela effectivement et je ne connaissais pas l'encodage à utiliser pour les fichiers properties. Je ne pensais pas que cela serait marqué dans la Javadoc....
    Je changerais l'encodage, et je reposterais une conclusion.
    Dans mon cas, les caractères d'échapement ne seront pas necessaires a priori.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 90
    Par défaut
    Dans mon cas, les caractères d'échapement ne seront pas necessaires a priori.

    C'est la ou vient ton probleme donc, si tu veux voir les cracteres speciales(type accent...etc)
    il faut un échapement.
    grazie

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Retour sur mon test!
    @gifffftane Deja petit rectification, les fichiers Properties utilisent ISO 8859-1 et non ISO-8859-1, qui sont des formats différents. (cf
    wikipedia)

    Cependant cela ne change pas grand chose pour mon problème et avec un tel encodage, je ne devrais pas devoir à utiliser le système d'échapement puisque les accents sont compris dans ce format. Mais même après changement de mon encodage sur mes fichiers, il s'avère que les accents sont toujours aussi mal affichés.

    @Alghero A priori non, . Mais c'est peut être la seule solution....

    PS : Peut etre que ResourceBundle fait que le fichier Properties ne sont pas lus avec un tel encodage mais je ne vois pas pourquoi cela serait le cas... Utiliser PropertyResourceBundle ne change rien...

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Citation Envoyé par TabrisLeFol
    Retour sur mon test!
    @gifffftane Deja petit rectification, les fichiers Properties utilisent ISO 8859-1 et non ISO-8859-1, qui sont des formats différents. (cf
    wikipedia)
    Et bien au moins, ce soir, je-suis-plus-intelligent-que-ce-matin. Merci.
    Citation Envoyé par TabrisLeFol
    Cependant cela ne change pas grand chose pour mon problème et avec un tel encodage, je ne devrais pas devoir à utiliser le système d'échapement puisque les accents sont compris dans ce format. Mais même après changement de mon encodage sur mes fichiers, il s'avère que les accents sont toujours aussi mal affichés.

    @Alghero A priori non, . Mais c'est peut être la seule solution....
    Bon, alors, examinons maintenant le reste. L'affichage est du swing ? Et gères-tu l'encodage des Strings, ou te reposes-tu sur l'encodage par défaut de la plate-forme ? Et dans ce cas, quel est-il ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    L'affichage est effectivement du swing. Et en ce qui concerne l'encodage par defaut... ba euh... celui par defaut. (UTF-8 ? )

    Edit : Et au fait comment connait on les sequences d'echapement ? Ce document explique ce que c'est mais pas les sequences utilisables....

    Redit: Un autre document explique comment gerer l'encodage pour les entrées/sorties... Mais bon dans mon cas, cela est géré par le ResourceBundle... Donc j'imagine d'après ton post qu'il faut definir l'encodage pour swing directement... Je continue ma recherche donc.

  8. #8
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Si c'est du swing, les choses devraient automatiquement bien se passer, il me semble... je te demandais surtout parce que j'avais peur que ce soit un affichage sur console...

    Malheureusement je ne sais plus très bien, alors... Je suis français, pourtant je programme avec un système linux dont l'encoding par défaut est UTF-8 (comme tes anglais, alors), pourtant mes properties sont en IO-8859 par je ne sais quelle manipulation, et tous les accents contenus dans les properties s'affichent parfaitement dans swing.

    Je tablerai pour une bizarreté au niveau de l'encodage du properties... Si tu es sous linux et que tu fais la commande file monfichier.properties, que te dit-il ? (si tu es sous windows il y a peut être une commande équivalente ? )...

    Et dans le code java, si tu fais System.out.println(System.getProperty("file.encoding")); que te dit-il ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Alors sortie de la commande file (oui, je suis sous linux - version anglaise)
    ISO-8859 text, with CRLF, LF line terminators
    ISO-8859 English text, with very long lines, with CRLF, LF line terminators

    (Je sais pas pourquoi le deuxième est considéré comme anglais et par l'autre.)

    Quand à la sortie Java de System.out.println(System.getProperty("file.encoding"));, c'est UTF-8.

    J'essayerais de changer cette propriété directement en Java pour tester mais plus tard...

  10. #10
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Le mieux est peut être de faire un test...

    Voici un petit programme qui affiche un properties dans un JTextPane :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    /*
     * AffProps.java
     *
     * Created on 18 février 2007, 16:18
     *
     */
     
    package praline;
     
    import java.awt.Dimension;
    import java.io.FileInputStream;
    import java.util.Properties;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
    import javax.swing.SwingUtilities;
     
    public class AffProps
    {
      public static void main(String[] args) throws Exception
      {
        String nomprops;
        final Properties props;
     
        nomprops = "props.properties";
        if ((args != null)  &&  (args.length > 0))
          nomprops = args[0];
        props = new Properties();
        props.load(new FileInputStream(nomprops));
        SwingUtilities.invokeLater(new java.lang.Runnable()
        {
          public void run()
          {
            JFrame frame;
            JTextPane paneprops;
            StringBuilder txtprops;
     
            frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setPreferredSize(new Dimension(300, 400));
            paneprops = new JTextPane();
            txtprops = new StringBuilder();
            for (Object key : props.keySet())
              txtprops.append(key.toString()+ " = "+props.get(key)+"\n");
            paneprops.setText(txtprops.toString());
            frame.getContentPane().add(new JScrollPane(paneprops));
            frame.pack();
            frame.setVisible(true);
          }
        });
      }
    }
    Chez moi il fonctionne très bien, avec toutes sortes d'accents, tant que le properties est en ISO-comme-il-faut. Et chez toi ?

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    J'ai fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperty("file.encoding","IO-8859");
    mais cela ne change rien.

    Mais après reflexion, comment swing connait l'encodage a utiliser? Et comment peut etre sur qu'il est installé?

    EDIT : J'ai vu ton post, j'applique et je repost.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    C'est bien le ResourceBundle qui ....

    Voici le code un peu modifié, lire le fichier properties fonctionne correctement, mais en passant par le ResourceBundle, non. Il faut croire que lui, à un moment ou à un autre, manipule un encodage different...

    EDIT : En utilisant des sequences d'échapements et des fichiers en UTF-8, le même problème se pose... Autrement dit les sequences sont bien interpretées en passant par la lecture du fichier properties directement, mais avec le ResourceBundle cela ne fonctionne pas.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    /*
     * AffProps.java
     *
     * Created on 18 février 2007, 16:18
     *
     */
     
    package praline;
     
    import java.awt.Dimension;
    import java.io.FileInputStream;
    import java.util.Iterator;
    import java.util.Locale;
    import java.util.Properties;
    import java.util.ResourceBundle;
     
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
    import javax.swing.SwingUtilities;
     
    public class AffProps
    {
      public static void main(String[] args) throws Exception
      {
        String nomprops;
        final Properties props;
        String nomrb;
        final ResourceBundle rb;
     
        nomrb = "props";
        nomprops = nomrb+".properties";
        if ((args != null)  &&  (args.length > 0))
          nomprops = args[0];
        props = new Properties();
        props.load(new FileInputStream(nomprops));
        rb = ResourceBundle.getBundle(nomrb, Locale.getDefault());
     
        // test en lisant le fichier directement
        SwingUtilities.invokeLater(new java.lang.Runnable()
        {
          public void run()
          {
            JFrame frame;
            JTextPane paneprops;
            StringBuilder txtprops;
     
            frame = new JFrame("Fichier properties!");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setPreferredSize(new Dimension(300, 400));
            paneprops = new JTextPane();
            txtprops = new StringBuilder();
            Iterator it = props.keySet().iterator();
            while(it.hasNext()) {
            	Object key = it.next();
              txtprops.append(key.toString()+ " = "+props.get(key)+"\n");
            }
            paneprops.setText(txtprops.toString());
            frame.getContentPane().add(new JScrollPane(paneprops));
            frame.pack();
            frame.setVisible(true);
          }
        });
     
        // test en utilisant le ResourceBundle
        SwingUtilities.invokeLater(new java.lang.Runnable()
        	    {
        	      public void run()
        	      {
        	        JFrame frame;
        	        JTextPane paneprops;
        	        StringBuilder txtprops;
     
        	        frame = new JFrame("ResourceBundle!");
        	        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        	        frame.getContentPane().setPreferredSize(new Dimension(300, 400));
        	        paneprops = new JTextPane();
        	        txtprops = new StringBuilder();
        	        Iterator it = props.keySet().iterator();
        	        while(it.hasNext()) {
        	        	Object key = it.next();
        	          txtprops.append(key.toString()+ " = "+rb.getString(key.toString())+"\n");
        	        }
        	        paneprops.setText(txtprops.toString());
        	        frame.getContentPane().add(new JScrollPane(paneprops));
        	        frame.pack();
        	        frame.setVisible(true);
        	      }
        	    });
      }
    }

  13. #13
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Ah ! Désolé pour les ResourceBundle, je connais pas

    Bonne chance !

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Merci.
    J'ai remplacé, pour l'instant les ResourceBundle par des Properties. C'est déjà un progrès puisque cela fonctionne alors correctement, mais je n'ai cependant pas toute les fonctionnalitées des ResourceBundle....

Discussions similaires

  1. [AJAX] Recherche : Fonction open source pour l'encodage des accents ?
    Par polothentik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/04/2008, 11h09
  2. [AJAX] [XHR] encodage et accents
    Par mig87 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2006, 15h17
  3. [XML][Flash] Problème d'encodage des accents
    Par JoN28fr dans le forum Flash
    Réponses: 20
    Dernier message: 11/10/2006, 21h16
  4. [XML][Flash] Problème d'encodage des accents
    Par JoN28fr dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 06/10/2006, 16h45
  5. [XML] encodage des accents
    Par matonfire dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 05/05/2004, 15h48

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