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

Entrée/Sortie Java Discussion :

java 1.5 et java 1.6


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Par défaut java 1.5 et java 1.6

    Voici un petit code java pas bien méchant mais dont la réaction selon qu'il est excéuté avec java 1.5 ou java 1.6 est surprenante sur mon PC. Dans le zip, vous trouverez la sortie faite avec les 2 versions java et le même input (in.txt) qui est un fichier UTF-8 qui contient des caractères cyrilliques.
    Cela réagit-il de la manière chez vous ?

    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
    package javaomnimarktest;
     
    import java.io.*;
     
    public class Sample21 {
       private static String readFileAsString(String filePath, String charset) throws IOException {
          StringBuilder       value = new StringBuilder ("");
          int                i;
          Reader             r = new InputStreamReader (new FileInputStream (filePath), charset);
          while ((i = r.read ()) >= 0) {
             value.appendCodePoint (i);
          }
          r.close ();
          return value.toString ();
       }
     
       private static void expandChars (String s, String fileName) throws IOException {
          PrintStream        ps = new PrintStream (fileName);
          int                i;
     
          for (i = 0; i < s.length(); i++) {
             int c = s.codePointAt (i);
             if (c <= 127) {
                ps.write (c);
             } else {
                ps.format ("&#x%04x;", c);
             }
          }
          ps.close ();
       }
     
       public static void main (String [] args) throws IOException {
     
            System.err.println ("Running Sample2.java");
            String inputString = readFileAsString ("in.txt", "UTF-8");
            expandChars (inputString, "in-chars-java.txt");
       }
    }
    Fichiers attachés Fichiers attachés

  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,


    Je pense que le problème vient de ta méthode de lecture. La méthode read() te retourne la valeur d'un caractère et non pas son codePoint qui peut être différent selon la manière dont la chaine est encodé en interne.

    Ta méthode de lecture devrait plutôt ressembler à ceci :
    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
        private static String readFileAsString(String filePath, String charset)
                throws IOException {
            StringBuilder value = new StringBuilder();
            Reader r = new InputStreamReader(new FileInputStream(filePath), charset);
            try {
                char[] cbuf = new char[8192];
                int len;
     
                while ( (len=r.read(cbuf)) >= 0 ) {
                    value.append(cbuf, 0, len);
                }
            } finally {
                r.close();
            }
            return value.toString();
        }
    a++

  3. #3
    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
    Ouaip, j'ai ce même comportement.

    La raison en est que l'encodage de ton fichier in.txt est incorrect.

    Par défaut, Java remplace les caractères qu'il ne peut pas décoder, par une valeur incorrecte plus ou moins bien censée montrer qu'il y a une erreur. Et apparemment il ne remplace pas tes caractères par la même chose en 1.5 ou en 1.6.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Java 5.0 et java.util.Date
    Par Royd938 dans le forum Langage
    Réponses: 4
    Dernier message: 10/07/2006, 12h19
  2. Réponses: 12
    Dernier message: 02/05/2006, 16h31
  3. [Java] Livres de certification java 5
    Par garincha55 dans le forum Certifications
    Réponses: 2
    Dernier message: 13/04/2006, 15h20
  4. [PERL et JAVA] Appeler PERL depuis JAVA
    Par krusty dans le forum Modules
    Réponses: 4
    Dernier message: 05/04/2006, 21h49
  5. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46

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