Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
642 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] problème d'encoding

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] problème d'encoding

n°1670096
Giz
Posté le 12-01-2008 à 14:17:52  profilanswer
 

Bonjour,
 
modo > J'avais déjà crée un sujet (qui a été fermé  :( ) sur un problème d'encoding. Désolé j'ai oublié de présenter mon avancement sur le problème. Je reprends.
 
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.
 
 

Code :
  1. String filename = "__________.txt";
  2.  File file = new File(filename);
  3.  FileInputStream fis = new FileInputStream(file);
  4.  byte[] buffer = new byte[(int) file.length()];
  5. fis.read(buffer);
  6. String res = new String(buffer);


 
Rien que le code ci-dessus ne marche pas lorsque j'affiche res dans la console eclipse, pourquoi ? Qu'y a-t-il de faux ?


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 12-01-2008 à 14:17:52  profilanswer
 

n°1670107
Giz
Posté le 12-01-2008 à 14:48:43  profilanswer
 

Pour être très très succint, le code suivant affiche mal la string dans la console debug d'eclipse, mais s'affiche bien dans l'onglet "Display" d'eclipse :


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


 
Pourquoi ?

Message cité 1 fois
Message édité par Giz le 12-01-2008 à 14:50:00

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1670145
masklinn
í dag viðrar vel til loftárása
Posté le 12-01-2008 à 17:28:58  profilanswer
 

Tout d'abord, tu vas me faire le plaisir d'aller lire http://www.joelonsoftware.com/articles/Unicode.html
 
Ensuite, tu remarqueras qu'à aucun moment tu ne dis à java en quel encoding est le fichier [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1670148
zapan666
Tout est relatif
Posté le 12-01-2008 à 17:33:02  profilanswer
 

Giz a écrit :

Pour être très très succint, le code suivant affiche mal la string dans la console debug d'eclipse, mais s'affiche bien dans l'onglet "Display" d'eclipse :


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


 
Pourquoi ?


Parce que la console n'est peut être pas configuré pour sortir de l'utf8


---------------
my flick r - Just Tab it !
n°1670669
Giz
Posté le 14-01-2008 à 11:29:40  profilanswer
 

masklinn a écrit :

Tout d'abord, tu vas me faire le plaisir d'aller lire http://www.joelonsoftware.com/articles/Unicode.html
 
Ensuite, tu remarqueras qu'à aucun moment tu ne dis à java en quel encoding est le fichier [:spamafote]


 
Bah
 

Citation :

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.


 
 [:wam]  
 
Sinon j'ai lu ton article. Intéressant comme théorie. Cependant cela ne m'aide pas vraiment dans la pratique avec java. Je suis confronté à une API.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1670672
Giz
Posté le 14-01-2008 à 11:33:04  profilanswer
 

zapan666 a écrit :


Parce que la console n'est peut être pas configuré pour sortir de l'utf8


 
J'ai beau chercher dans toutes les options d'eclipse, je n'ai pas trouvé comment paramétrer cela...En fait le fond de ma question est que j'envoie la String dans le body d'un mail sensé être en UTF-8 (encoding indiqué par outlook en plus à la lecture du mail). Cependant les caractères affichés dans le corps du mail sont exactement ceux de la console (caractères spéciaux s'affichent mal).
Du coup, je me dis, "tant que ça s'affiche mal dans la console, ça s'affichera mal dans le corps du mail". Alors que dans l'onglet "display" d'eclipse, ce problème d'affichage n'apparaît pas.
 
J'ai essaié des codes du style :
 

Code :
  1. String utf_16 = "Yürürlüğe girişстраницы";
  2. String utf_8 = new String(utf_16.getBytes(),"UTF-8" );


 
Mais le bug est toujours présent.

Message cité 2 fois
Message édité par Giz le 14-01-2008 à 11:36:09

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1670693
masklinn
í dag viðrar vel til loftárása
Posté le 14-01-2008 à 11:44:26  profilanswer
 

Giz a écrit :

 

Bah

 
Citation :

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.

 

[:wam]


[:prozac]

 

J'en ai rien à braire du sujet de ton exercice, je t'ai dit qu'à aucun endroit tu ne le fais savoir à Java. Java, il va pas lire ton sujet pour savoir ce qu'il doit faire [:pingouino]

Giz a écrit :

Sinon j'ai lu ton article. Intéressant comme théorie. Cependant cela ne m'aide pas vraiment dans la pratique avec java. Je suis confronté à une API.


Je te suggère de relire l'article, parce qu'apparement t'as rien compris.

 

Et ça n'a rien d'une théorie bon sang de bois [:pingouino]

Giz a écrit :

 

J'ai beau chercher dans toutes les options d'eclipse, je n'ai pas trouvé comment paramétrer cela...En fait le fond de ma question est que j'envoie la String dans le body d'un mail sensé être en UTF-8 (encoding indiqué par outlook en plus à la lecture du mail). Cependant les caractères affichés dans le corps du mail sont exactement ceux de la console (caractères spéciaux s'affichent mal).
Du coup, je me dis, "tant que ça s'affiche mal dans la console, ça s'affichera mal dans le corps du mail". Alors que dans l'onglet "display" d'eclipse, ce problème d'affichage n'apparaît pas.


Non mais à la base t'as pas l'air de percuter qu'à aucun moment tu ne dis à java quel est l'encodage de ton fichier d'entrée __________.txt

 

Donc il utilise un encodage par défaut (lequel, j'en sais rien) et ça pète, ça n'a rien de bizarre [:pingouino]

 

edit: d'ailleurs je suis persuadé que tu ne dis pas non plus à java avec quel encodage il est censé écrire le fichier de sortie...

Message cité 1 fois
Message édité par masklinn le 14-01-2008 à 11:45:27

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1670725
zapan666
Tout est relatif
Posté le 14-01-2008 à 13:24:54  profilanswer
 

Giz a écrit :


 
J'ai beau chercher dans toutes les options d'eclipse, je n'ai pas trouvé comment paramétrer cela...


C'est parce que l'option est pas si facile a trouvé que ça  :whistle:  
 
Tu as fais un "Run" pour ton projet je supose (le truc avec la flèche verte) ? tu l'édite et dans l'onglet common, tu dois pouvoir changer l'encoding
http://img61.imageshack.us/img61/2050/consolekd2.png


---------------
my flick r - Just Tab it !
n°1670743
Giz
Posté le 14-01-2008 à 13:49:56  profilanswer
 

masklinn a écrit :


[:prozac]
 
J'en ai rien à braire du sujet de ton exercice, je t'ai dit qu'à aucun endroit tu ne le fais savoir à Java. Java, il va pas lire ton sujet pour savoir ce qu'il doit faire [:pingouino]


 

masklinn a écrit :


Je te suggère de relire l'article, parce qu'apparement t'as rien compris.
 
Et ça n'a rien d'une théorie bon sang de bois [:pingouino]


 

masklinn a écrit :


Non mais à la base t'as pas l'air de percuter qu'à aucun moment tu ne dis à java quel est l'encodage de ton fichier d'entrée __________.txt
 
Donc il utilise un encodage par défaut (lequel, j'en sais rien) et ça pète, ça n'a rien de bizarre [:pingouino]
 
edit: d'ailleurs je suis persuadé que tu ne dis pas non plus à java avec quel encodage il est censé écrire le fichier de sortie...


 
Si jamais tu trouves dans l'API une méthode qui permet d'ouvrir un fichier en pouvant spécifier le format d'encodage de celui-ci, dis moi où elle est alors...j'en ai pas vu.
J'ai essaié un autre code java :
 

CharsetDecoder decoder = Charset.forName("UTF-8" ).newDecoder();
  CharsetEncoder encoder = Charset.forName("UTF-8" ).newEncoder();
  String utf_16 = "Yürürlüğe girişстраницы";
  ByteBuffer bbin = encoder.encode(CharBuffer.wrap(utf_16.toCharArray()));
  CharBuffer cbout = decoder.decode(bbin);
  System.out.println(cbout);
  return new String(cbout.array());


 
qui retourne une String "buggée" encore :/.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1670747
Giz
Posté le 14-01-2008 à 13:52:42  profilanswer
 

zapan666 a écrit :


C'est parce que l'option est pas si facile a trouvé que ça  :whistle:  
 
Tu as fais un "Run" pour ton projet je supose (le truc avec la flèche verte) ? tu l'édite et dans l'onglet common, tu dois pouvoir changer l'encoding
http://img61.imageshack.us/img61/2050/consolekd2.png


 
J'ai regardé, je n'ai aucun 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


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 14-01-2008 à 13:52:42  profilanswer
 

n°1670763
masklinn
í dag viðrar vel til loftárása
Posté le 14-01-2008 à 14:09:14  profilanswer
 

Giz a écrit :

Si jamais tu trouves dans l'API une méthode qui permet d'ouvrir un fichier en pouvant spécifier le format d'encodage de celui-ci, dis moi où elle est alors...j'en ai pas vu.


InputStreamReader et OutputStreamWriter prennent un encoding normalement.

 

C'est super merdique à utiliser (comme toutes les API d'I/O java), faut les wrapper autour de et dans d'autres trucs, mais normalement ça marche.

Message cité 2 fois
Message édité par masklinn le 14-01-2008 à 14:15:31

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1670771
souk
Tourist
Posté le 14-01-2008 à 14:13:51  profilanswer
 

masklinn a écrit :


InputStreamReader et OutputStreamWriter prennent un encoding normalement.
 
C'est super merdique à utiliser (comme toutes les API d'I/O java), faut les wrapper autour de et dans d'autres trucs, mais normalement ça marche.


 
[:joce]

n°1670773
masklinn
í dag viðrar vel til loftárása
Posté le 14-01-2008 à 14:15:37  profilanswer
 


 :whistle:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1670882
Giz
Posté le 14-01-2008 à 15:39:49  profilanswer
 

masklinn a écrit :


InputStreamReader et OutputStreamWriter prennent un encoding normalement.
 
C'est super merdique à utiliser (comme toutes les API d'I/O java), faut les wrapper autour de et dans d'autres trucs, mais normalement ça marche.


 
J'ai donc essaié ces méthodes. Je lis mon fichier avec, je génère une String après lecture et je l'affiche dans la console puis je l'envoi dans le contenu d'un mail (les 2). Même résultat : les caractères spéciaux ne passent pas.
 

Code :
  1. String filename = "__________.txt";
  2.  File file = new File(filename);
  3.  FileInputStream fis = new FileInputStream(file);
  4.  BufferedReader in  = new BufferedReader(new InputStreamReader(fis,Charset.forName("UTF-8" )));
  5.  char[] buf = new char[(int) file.length()];
  6.  in.read(buf);
  7. String str = new String(buf);
  8.  String body = new String(str.getBytes(),"UTF-8" );
  9.  System.out.println(body);
  10.  return body;


 
RQ : le contenu du mail est exactement le même que celui de l'affichage dans la console debug d'eclipse , bien qu'ayant spécifié de l'UTF-8 "de partout" (et outlook me détecte bien un mail en UTF-8)


Message édité par Giz le 14-01-2008 à 15:41:56

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1670902
esox_ch
Posté le 14-01-2008 à 15:51:24  profilanswer
 

[:prozac]
Je sens que masklinn va faire une attaque

n°1670918
Giz
Posté le 14-01-2008 à 15:59:25  profilanswer
 

pourquoi ?  :lol:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1671007
esox_ch
Posté le 14-01-2008 à 17:22:33  profilanswer
 

Parce que à voir ton code on dirait que t'as pas la moindre idée de ce que tu es entrain de taper n'importe quoi, juste pour nous faire plaisir, sans avoir aucune idée de ce c'est au juste

n°1671020
Giz
Posté le 14-01-2008 à 17:32:57  profilanswer
 

lol, calmos chicos  :o J'ai peut être oublié de rajouter "newbie" dans le post  [:figti] à voir vos réactions.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1671024
esox_ch
Posté le 14-01-2008 à 17:41:16  profilanswer
 

Non mais non ... Le problème c'est que ton truc suffit de lire la doc (je t'assure, y a des gens avant toi qui ont eu l'idée de faire un programme qui supporte le utf8) ... Ce que manifestement tu veux pas faire

n°1671025
Giz
Posté le 14-01-2008 à 17:42:50  profilanswer
 

j'ai fait

Code :
  1. BufferedReader in  = new BufferedReader(new InputStreamReader(fis,Charset.forName("UTF-8" )));


 
Mais après je souhaite avoir une String en UTF-8.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1671033
esox_ch
Posté le 14-01-2008 à 18:00:51  profilanswer
 

Je veux pas trop enfoncer le clou mais ...
 

Citation :


esox@CColomb:~$javac test.java  
esox@CColomb:~$ java test
rişстраницы


mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] problème d'encoding

 

Sujets relatifs
Probleme pop_upproblème de formulaire
[Java - Expert] Exercice d'encodingProblème avec SWFobject.js
Probleme sur theme Php [résolu][Résolu] problème strstr() et son 3e paramètre
ajouter des colonnes dans une JTable probleme !!Problème d'enregistrement en format texte
Problème de mise à jour RSS 
Plus de sujets relatifs à : [Java] problème d'encoding


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR