Conversion d'un texte

cs_calypso78 Messages postés 35 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 27 octobre 2012 - 27 mars 2011 à 20:54
cs_calypso78 Messages postés 35 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 27 octobre 2012 - 30 mars 2011 à 20:55
Bonjour,

Ayant lutté pendant cet après-midi contre l'ISO-8859-1 afin de le convertir en UTF-8, j'ai finalement cédé, et je vous demande une piste.

Je reçois du code source à partir d'un site internet de cette manière :

BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

Ceci fonctionne très bien, jusqu'à ce que je voie ce que ça m'a écrit, plein de caractères tous moches. Il me semble donc qu'il faut l'encoder en UTF-8. J'ai essayé 2 méthodes pour l'instant inefficaces chez moi :



BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), Charset.forName("UTF-8")));
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8"));




Le texte ne change pas du tout, et pourtant netbeans ne me signale pas d'erreurs.

Des informations complémentaires :

Je stocke tout le code source dans une ArrayList nommée liste, puis cherche la bonne ligne, que je stocke dans la variable chapitre.

En espérant que vous pourrez m'aider,
A bientôt
Calypso

2 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 mars 2011 à 16:57
Salut,

pour changer l'encodage tu peux faire un truc genre :
public String changeCharset(String inputString, String inputCharset, String outputCharset) {
  if(inputString == null) return "null";
  Charset input = Charset.forName(inputCharset);
  Charset output = Charset.forName(outputCharset);
  ByteBuffer inputBuffer = ByteBuffer.wrap(inputString.getBytes());
  CharBuffer data = input.decode(inputBuffer);
  ByteBuffer outputBuffer = output.encode(data);
  byte[] outputData = outputBuffer.array();
  return new String(outputData);
}


pour l'utilisation : (exemple la chaine est en ISO-8859-1 et tu veux une sortie en UTF-8)
String iso = "......";
String utf8 = changeCharset(iso, "ISO-8859-1", "UTF-8");



------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
cs_calypso78 Messages postés 35 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 27 octobre 2012
30 mars 2011 à 20:55
Bon, après test, mon code :

String chapitre_avant = liste.get(296);

        Charset input = Charset.forName("ISO-8859-1");
        Charset output = Charset.forName("UTF-8");
        ByteBuffer inputBuffer = ByteBuffer.wrap(chapitre_avant.getBytes());
        CharBuffer data = input.decode(inputBuffer);
        ByteBuffer outputBuffer = output.encode(data);
        byte[] chapitre_apres = outputBuffer.array();

        String t = new String(chapitre_apres , "UTF-8" );

        System.out.println(t);


Et une partie du résultat, j'ai pris le mot "c'est" : c’est
En affichant chapitre_apres, ça ne fonctionne pas non plus.
J'ai conscience que j'abuse un peut de ta gentillesse, mais... tu pourrais m'expliquer ton code s'il te plaît?

Merci et bonne soirée
0
Rejoignez-nous