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 :

Exercice d'encoding


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut Exercice d'encoding
    Bonjour,

    Voilà un programme d'encoding que je n'arrive pas à faire marche avec Java.
    A cette adresse : ftp://88.165.6.232/ vous trouverez un fichier "__________.txt" qui contient des caractères bizarres mais justes (y'a du russe, du polonais et du turc). Il est en UTF-8.
    Le but est de lire ce fichier en entrée et de le contenir dans une String java.
    A partir de cette String, l'écrire dans un fichier de sortie résultat : res.txt
    Le résultat attendu par le programme est que res.txt est une copie conforme de "__________.txt".
    Je bute sur ce programme depuis un bon moment et j'ai besoin de votre aide

    Restriction : S'appuyer seulement sur des méthodes de l'API Java 1.4.2 ou inférieur.

    Voici du code qui marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String filename = "__________.txt";
    		File file = new File(filename);
    		FileInputStream fis = new FileInputStream(file);
    		byte[] buffer = new byte[(int) file.length()];
    fis.read(buffer);
    String res = new String(buffer);
    Sans aller plus loin, res ne contient pas une bonne chaîne (accents daubé) lorsque j'affiche la chaîne dans la console eclipse (System.out.println)

  2. #2
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut
    pourquoi tu n'ecris pas directement le buffer que t'as lu dans le fichier res.txt, sans passer par le String ??

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Parce que c'est pas le but de l'excercice.

    En fait je n'arrive pas à faire les 2 : le mettre dans une String non buggée ou bien l'écrire dans un fichier. Ca paraît peut être "stupide" mais je me prends bien la tête avec ces encoding (véridique). La console eclipse ne m'affiche jamais la bonne String.
    Problème de config ?

  4. #4
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut
    c'est peut etre du a ce que les String de Java ne supportent que des caracteres UTF-16.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Tu peux détailler...pour être très très succint, le code suivant affiche mal la string dans la console eclipse :

    String toto = "Yürürlüğe girişстраницы";
    System.out.println(toto);

  6. #6
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut
    ben j'ai lu quelque part que la classe String utilise la notation UTF-16 et ton exercice utilise UTF-8, je vois pas comment je pourrai te detaillé ca

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Très bien. Comment expliques-tu ce code qui ne marche pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    fis.read(buffer);
    String res = new String(buffer, "UTF-8");
    System.out.println(res);

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Ni celui la d'ailleurs (d'après la FAQ) :
    String toto = "Yürürlüğe girişстраницы";
    String bod = new String(toto.getBytes(),"UTF-8");
    System.out.println(bod);
    Je précise que l'affichage dans l'onglet display d'eclipse est OK. Dans la console debug c'est KO :/.

  9. #9
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut
    ton texte est-il ecrit en quel charset??

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Le fichier est au format UTF-8 (déjà précisé au premier post).

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    La console d'eclipse affiche bien des string encodées en UTF-8 au moins ? Parce que si non, je ne vois pas dans les préférences d'eclipse l'option pour paramétrer cela.

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par kroax Voir le message
    La console d'eclipse affiche bien des string encodées en UTF-8 au moins ? Parce que si non, je ne vois pas dans les préférences d'eclipse l'option pour paramétrer cela.
    C'est parametrable pour une execution donnée. Tu vas dans Run.../Common.

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Citation Envoyé par Sanguko Voir le message
    C'est parametrable pour une execution donnée. Tu vas dans Run.../Common.
    J'ai regardé, je n'ai aucune indication parlant de l'encoding dans cet onglet. Je dispose d'eclipse sous l'environnement RAD (eclispe + websphère). La version de rad est 6.0.1 qui inclus eclipse 3.0.2

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    J'utilise eclipse 3.1.2. Effectivement, dans les version 3.0 ca n'apparait pas.

    Je sais pas si ca peut t'aider, mais l'encoding de la console semble dépendre de la platform. Sous Windows, c'est cp1252 (ie du windows spécifique), et sous linux, c'est du ISO-8859-1.

    Pour avoir l'encoding dispo, c'est :
    Charset.defaultCharset()
    ou
    new OutputStreamWriter( System.out ).getEncoding();

    Je sais que tu es en 1.4, mais j'ai pas vérifié si c'était dispo.

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Par défaut
    Je n'ai pas trouvé la méthode defaultCharset() pour java 1.4.2.
    Mais j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Charset.availableCharsets());
    Sortie :

    {Big5=Big5, CESU-8=CESU-8, COMPOUND_TEXT=COMPOUND_TEXT, EUC-CN=EUC-CN, EUC-JP=EUC-JP, EUC-KR=EUC-KR, EUC-TW=EUC-TW, GB18030=GB18030, GB2312=GB2312, GBK=GBK, hp-roman8=hp-roman8, IBM-037=IBM-037, IBM-1006=IBM-1006, IBM-1025=IBM-1025, IBM-1026=IBM-1026, IBM-1027=IBM-1027, IBM-1041=IBM-1041, IBM-1043=IBM-1043, IBM-1046=IBM-1046, IBM-1046S=IBM-1046S, IBM-1047=IBM-1047, IBM-1088=IBM-1088, IBM-1097=IBM-1097, IBM-1098=IBM-1098, IBM-1112=IBM-1112, IBM-1114=IBM-1114, IBM-1115=IBM-1115, IBM-1122=IBM-1122, IBM-1123=IBM-1123, IBM-1124=IBM-1124, IBM-1140=IBM-1140, IBM-1141=IBM-1141, IBM-1142=IBM-1142, IBM-1143=IBM-1143, IBM-1144=IBM-1144, IBM-1145=IBM-1145, IBM-1146=IBM-1146, IBM-1147=IBM-1147, IBM-1148=IBM-1148, IBM-1149=IBM-1149, IBM-1351=IBM-1351, IBM-1362=IBM-1362, IBM-1363=IBM-1363, IBM-1363C=IBM-1363C, IBM-1364=IBM-1364, IBM-1370=IBM-1370, IBM-1371=IBM-1371, IBM-1380=IBM-1380, IBM-1381=IBM-1381, IBM-1382=IBM-1382, IBM-1383=IBM-1383, IBM-1385=IBM-1385, IBM-1386=IBM-1386, IBM-1388=IBM-1388, IBM-1390=IBM-1390, IBM-1399=IBM-1399, IBM-273=IBM-273, IBM-277=IBM-277, IBM-278=IBM-278, IBM-280=IBM-280, IBM-284=IBM-284, IBM-285=IBM-285, IBM-290=IBM-290, IBM-297=IBM-297, IBM-300=IBM-300, IBM-301=IBM-301, IBM-33722=IBM-33722, IBM-33722C=IBM-33722C, IBM-420=IBM-420, IBM-420S=IBM-420S, IBM-424=IBM-424, IBM-437=IBM-437, IBM-500=IBM-500, IBM-720=IBM-720, IBM-737=IBM-737, IBM-775=IBM-775, IBM-808=IBM-808, IBM-833=IBM-833, IBM-834=IBM-834, IBM-835=IBM-835, IBM-836=IBM-836, IBM-837=IBM-837, IBM-838=IBM-838, IBM-850=IBM-850, IBM-852=IBM-852, IBM-855=IBM-855, IBM-856=IBM-856, IBM-857=IBM-857, IBM-858=IBM-858, IBM-859=IBM-859, IBM-860=IBM-860, IBM-861=IBM-861, IBM-862=IBM-862, IBM-863=IBM-863, IBM-864=IBM-864, IBM-864S=IBM-864S, IBM-865=IBM-865, IBM-866=IBM-866, IBM-867=IBM-867, IBM-868=IBM-868, IBM-869=IBM-869, IBM-870=IBM-870, IBM-871=IBM-871, IBM-874=IBM-874, IBM-875=IBM-875, IBM-897=IBM-897, IBM-918=IBM-918, IBM-921=IBM-921, IBM-922=IBM-922, IBM-924=IBM-924, IBM-927=IBM-927, IBM-930=IBM-930, IBM-932=IBM-932, IBM-933=IBM-933, IBM-935=IBM-935, IBM-937=IBM-937, IBM-939=IBM-939, IBM-942=IBM-942, IBM-942C=IBM-942C, IBM-943=IBM-943, IBM-943C=IBM-943C, IBM-947=IBM-947, IBM-948=IBM-948, IBM-949=IBM-949, IBM-949C=IBM-949C, IBM-950=IBM-950, IBM-951=IBM-951, IBM-954=IBM-954, IBM-954C=IBM-954C, IBM-964=IBM-964, IBM-971=IBM-971, ISCII91=ISCII91, ISO-2022-CN=ISO-2022-CN, ISO-2022-CN-GB=ISO-2022-CN-GB, ISO-2022-JP=ISO-2022-JP, ISO-2022-KR=ISO-2022-KR, ISO-8859-1=ISO-8859-1, ISO-8859-10=ISO-8859-10, ISO-8859-13=ISO-8859-13, ISO-8859-14=ISO-8859-14, ISO-8859-15=ISO-8859-15, ISO-8859-16=ISO-8859-16, ISO-8859-2=ISO-8859-2, ISO-8859-3=ISO-8859-3, ISO-8859-4=ISO-8859-4, ISO-8859-5=ISO-8859-5, ISO-8859-6=ISO-8859-6, ISO-8859-6S=ISO-8859-6S, ISO-8859-7=ISO-8859-7, ISO-8859-8=ISO-8859-8, ISO-8859-9=ISO-8859-9, JIS0201=JIS0201, JIS0208=JIS0208, JIS0212=JIS0212, Johab=Johab, KOI8-R=KOI8-R, KOI8-RU=KOI8-RU, KOI8-U=KOI8-U, KSC5601=KSC5601, MacArabic=MacArabic, MacCentralEurope=MacCentralEurope, MacCroatian=MacCroatian, MacCyrillic=MacCyrillic, MacDingbat=MacDingbat, MacGreek=MacGreek, MacHebrew=MacHebrew, MacIceland=MacIceland, MacRoman=MacRoman, MacRomania=MacRomania, MacSymbol=MacSymbol, MacThai=MacThai, MacTurkish=MacTurkish, MacUkraine=MacUkraine, PTCP154=PTCP154, Shift_JIS=Shift_JIS, TIS-620=TIS-620, US-ASCII=US-ASCII, UTF-16=UTF-16, UTF-16BE=UTF-16BE, UTF-16LE=UTF-16LE, UTF-32=UTF-32, UTF-32BE=UTF-32BE, UTF-32LE=UTF-32LE, UTF-8=UTF-8, UTF-8J=UTF-8J, windows-1250=windows-1250, windows-1251=windows-1251, windows-1252=windows-1252, windows-1253=windows-1253, windows-1254=windows-1254, windows-1255=windows-1255, windows-1256=windows-1256, windows-1256S=windows-1256S, windows-1257=windows-1257, windows-1258=windows-1258, windows-874=windows-874, windows-932=windows-932, windows-936=windows-936, windows-949=windows-949, windows-950=windows-950, X-UnicodeBig=X-UnicodeBig, X-UnicodeLittle=X-UnicodeLittle}
    Comme on peut le voir, l'UTF-8 est supporté.

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Le probleme n'est pas l'encoding supporté par la jvm, mais l'encoding de la console.
    Si tu veux afficher de l'UTF-8, il faut que ta console soit en utf8. Ce qui n'est pas le cas par défault, que ce soit sous eclipse, windows ou linux.

Discussions similaires

  1. Pages d'exercices à faire pour l'autoformation ?
    Par [thebadskull] dans le forum Evolutions du club
    Réponses: 13
    Dernier message: 15/06/2004, 20h26
  2. [encoding] symbole €
    Par phoebe dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 11/05/2004, 16h57
  3. Réponses: 4
    Dernier message: 07/05/2004, 21h15
  4. [JSP] encoder et décoder les param d'une URL ?
    Par iubito dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 22/12/2003, 11h34
  5. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

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