[JAVA] Les Charset en Java

Les Charset en Java [JAVA] - Java - Programmation

Marsh Posté le 13-10-2003 à 14:00:13    

Salut à tous,
 
je suis face à un problème qui me dérange : j'ai créer un tout petit programme qui va récupérer un fichier zippé à une URL précise, le décompresse et tente de l'encoder en ISO-8859-1 (à la base il s'agit d'UTF-16). C'est là que survient mon ennui : l'encodeur semble ne pas supporter le "é", tous les caractères suivants sont remplacés par des "?", quelqu'un connaît-il le problème ? Une solution à par réécrire un encodeur ?
Merci d'avance.
 
Je suis sous Windows 2000 SP4 JDK 1.4.2.


---------------
- "Qui diable es-tu ?"
Reply

Marsh Posté le 13-10-2003 à 14:00:13   

Reply

Marsh Posté le 13-10-2003 à 14:10:42    

C'est quoi, l'"encodeur" ? :??:


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 13-10-2003 à 14:15:40    

Je n'ai pas été précis à ce niveau-là, pardon il  s'agit de la classe : java.nio.charset.Charset qui, comme son nom l'indique sert à gérer les différents charset, encoder, décoder.


---------------
- "Qui diable es-tu ?"
Reply

Marsh Posté le 13-10-2003 à 14:24:25    

Ah OK. Donc c'que tu fais c'est bien un truc du genre  
Charset cs = Charset.forName("ISO-8859-1" );
cs.encode(taChaineEnUTF16);
? Et c'est ça qui merde ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 13-10-2003 à 14:30:38    

Tout-à-fait monsieur.


---------------
- "Qui diable es-tu ?"
Reply

Marsh Posté le 13-10-2003 à 14:40:59    

Humpf. Ca va p'têt venir du problème big endian/little endian d'UTF-16 :/ J'ai jamais fait ce genre de conversion mais la javadoc spécifie :

Citation :

The UTF-16 charsets use sixteen-bit quantities and are therefore sensitive to byte order.


dans la classe java.nio.charset.Charset. P'têt que ça vient de là ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 13-10-2003 à 14:50:51    

Taiche a écrit :

Humpf. Ca va p'têt venir du problème big endian/little endian d'UTF-16 :/ J'ai jamais fait ce genre de conversion mais la javadoc spécifie :

Citation :

The UTF-16 charsets use sixteen-bit quantities and are therefore sensitive to byte order.


dans la classe java.nio.charset.Charset. P'têt que ça vient de là ?

Et avec un byte order mark en premier?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-10-2003 à 14:55:48    

gilou a écrit :

Et avec un byte order mark en premier?
A+,


Bin c'est là toute la question, savoir s'il y en a ou pas dans le document traité par Zop. Extrait suivant de la javadoc :

Citation :

When decoding, the UTF-16 charset interprets a byte-order mark to indicate the byte order of the stream but defaults to big-endian if there is no byte-order mark; when encoding, it uses big-endian byte order and writes a big-endian byte-order mark.


Donc si y en a pas, ça part sur du big endian et si j'inverse pas tout, je crois que sur Ouinedoze c'est little endian. Bref, tout dépend de la plate-forme et de la présence du byte-order mark.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 13-10-2003 à 17:44:23    

j'ai pas encore touché au java.nio, mais ca ca marche pas ?  
 

Code :
  1. import java.io;
  2. InputStream inStreamUTF16 = ...; // tu vas le lire dans ton zip
  3. InputStreamReader readerUTF16 = new InputSteramReader(inStreamUTF16 , "UTF-16" );
  4. OutputStream outStreamISO = new FileOutputStream("ton fichier de sauvegarde" );
  5. Writer writerISO = new OutputStreamWriter(outStreamISO, "ISO-8859-1" );
  6. // copie du flux
  7. byte[] buffer = new byte[1024];
  8. int nbRead;
  9. while ((nbRead = readerUTF16.read(buffer)) > 0) {
  10.    writerISO.write(buffer, 0, nbRead);
  11. }
  12. writerISO.close();
  13. readerUTF16.close();


 
(j'ai pas testé alors je promets pas qu'il y a pas de faute de syntaxe ;))


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 13-10-2003 à 18:34:33    

Taiche a écrit :


Bin c'est là toute la question, savoir s'il y en a ou pas dans le document traité par Zop. Extrait suivant de la javadoc :

Citation :

When decoding, the UTF-16 charset interprets a byte-order mark to indicate the byte order of the stream but defaults to big-endian if there is no byte-order mark; when encoding, it uses big-endian byte order and writes a big-endian byte-order mark.


Donc si y en a pas, ça part sur du big endian et si j'inverse pas tout, je crois que sur Ouinedoze c'est little endian. Bref, tout dépend de la plate-forme et de la présence du byte-order mark.


Un fichier encodé en UTF-16 devrait toujours demarrer par une BOM. S'il y en a pas, c'est que c'est codé comme un pied, et que l'on peut s'attendre a des pbs de transport d'une plateforme a une autre.
Pour des flux avec protocole, on peut se dispenser de la BOM en indiquant: UTF-16BE ou UTF-16LE dans le protocole.
Si ton fichier est en XML et commence par une declaration XML ( <!xml... ) tu peux t'en sortir en regardant ce que tu recuperes au depart.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-10-2003 à 18:34:33   

Reply

Marsh Posté le 13-10-2003 à 20:55:18    

[:blueflag]


---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

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