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

Entrée/Sortie Java Discussion :

Changement du charset à la volée


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut Changement du charset à la volée
    Bonjour,

    je voudrais lire des données depuis un flux et en choisir le charset à la volée.

    Par exemple, je commence avec un charset ISO-8859-1, puis je switche pour l'UTF-8 pendant X temps (X indéfini), puis passer à ISO-8859-15, etc. Le tout sans fermer mon flux original.

    Comment faire ?

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Tu lis certainement ton flux par des tableaux de byte.

    Et bien par chance, il existe un constructeur String(byte[], String):
    - le premier argument est le tableau de byte à transformer en chaîne de caractères
    - le deuxième argument est le nom du charset que tu veux utiliser

    Il te suffit donc d'utiliser ces constructeurs avec différentes valeurs du "charset name" dans ta boucle pour changer dynamiquement l'encodage des chaînes que tu extrairas de ton flux sans fermer celui-ci.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Je connais cela, cependant, mon tableau peut contenir du texte avec plusieurs charsets. Je risque donc bien de recevoir des CharsetException alors que dans la partie désirée, il n'y a pas d'erreur, la prochaine

    Tout ce dont je suis sûr, c'est que mon texte atomique est délimité par \n.

    L'idéal étant un système équivalent à celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // On oublie les exceptions et la gestion des threads quelques instants...
    String charsetCourant = ...;
    InputStream is = ...;
    String line;
     
    while (true) {
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, charsetCourant));
      while ((line = reader.readLine()) != null) {
        System.out.println(line);
        if (...) { // changement de charset
          charsetCourant = ...;
          break;
        }
      }
      // On ne ferme pas le reader !
      reader = null;
      if (line == null)
        break;
    }
    is.close();
    Or, ce code laisse pas mal d'erreurs : des readers pas fermés. Mais si on les ferme, on ferme le flux original aussi... De plus, je peux perdre des caractères du flux original à cause du tampon. Je me retrouve donc assez bloqué.

Discussions similaires

  1. Changement de charset côté serveur
    Par T_Joe dans le forum Administration
    Réponses: 8
    Dernier message: 18/11/2008, 11h04
  2. Changement de propriétaire à la volée
    Par bleuerouge dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2008, 17h18
  3. FMODex et LOOP_MODE : changement de mode à la volée
    Par ttone dans le forum API graphiques
    Réponses: 0
    Dernier message: 19/05/2008, 15h39
  4. [D2007] Changement de langue à la volée
    Par sovitec dans le forum Delphi
    Réponses: 1
    Dernier message: 10/07/2007, 13h06
  5. Modification de charset à la volée.
    Par dingoth dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 05/09/2006, 20h14

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