[Java] problème d'encoding

problème d'encoding [Java] - Java - Programmation

Marsh Posté le 12-01-2008 à 14:17:52    

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
Reply

Marsh Posté le 12-01-2008 à 14:17:52   

Reply

Marsh Posté le 12-01-2008 à 14:48:43    

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
Reply

Marsh Posté le 12-01-2008 à 17:28:58    

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
Reply

Marsh Posté le 12-01-2008 à 17:33:02    

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 !
Reply

Marsh Posté le 14-01-2008 à 11:29:40    

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
Reply

Marsh Posté le 14-01-2008 à 11:33:04    

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
Reply

Marsh Posté le 14-01-2008 à 11:44:26    

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
Reply

Marsh Posté le 14-01-2008 à 13:24:54    

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 !
Reply

Marsh Posté le 14-01-2008 à 13:49:56    

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
Reply

Marsh Posté le 14-01-2008 à 13:52:42    

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
Reply

Marsh Posté le 14-01-2008 à 13:52:42   

Reply

Marsh Posté le 14-01-2008 à 14:09:14    

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
Reply

Marsh Posté le 14-01-2008 à 14:13:51    

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]

Reply

Marsh Posté le 14-01-2008 à 14:15:37    


 :whistle:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-01-2008 à 15:39:49    

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
Reply

Marsh Posté le 14-01-2008 à 15:51:24    

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

Reply

Marsh Posté le 14-01-2008 à 15:59:25    

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
Reply

Marsh Posté le 14-01-2008 à 17:22:33    

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

Reply

Marsh Posté le 14-01-2008 à 17:32:57    

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
Reply

Marsh Posté le 14-01-2008 à 17:41:16    

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

Reply

Marsh Posté le 14-01-2008 à 17:42:50    

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
Reply

Marsh Posté le 14-01-2008 à 18:00:51    

Je veux pas trop enfoncer le clou mais ...
 

Citation :


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


Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed