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

SL & STL C++ Discussion :

Lecture de fichier ASCII et encodage


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut Lecture de fichier ASCII et encodage
    Bonjour,

    Comme j'ai pas mal de soucis de gestion de l'encodage des caracteres, je cherche a savoir s'il existerait, quelque part, une lib ou un moceau de code open source qui me permette de lire des fichiers texte quelque soit leur encodage (ANSI, UTF8, ...) et qui gere au passage les fin de lignes windows et linux.

    Mon actuel code n'est pas du tout fiable en la matiere et je n'ai malheureusement pas devant moi les mois necessaire a la compréhension détaillée de ces notions...

    Merci de votre aide :-)

  2. #2
    Membre éprouvé Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Par défaut
    Bonjour,

    De mémoire (pas testé), la méthode STL pour faire des conversions d’encodage est la suivante :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::ifstream IStream("fichier-source");
    IStream.imbue(std::locale("locale-source"));
     
    std::ofstream OStream("fichier-cible");
    OStream.imbue(std::locale("locale-cible"));
     
    // copie d’un flux vers l’autre (je ne sais pas quelle est la meilleure technique)
    // les conversions sont faites automatiquement

    Quelques explications :
    • Les fonctions « imbue » permettent de définir les paramètres locaux (de langue) du flux.
    • "locale-source" et "locale-cible" sont des noms de paramètres locaux. Ces noms dépendent du système (sous linux, c’est du genre "fr_FR.UTF-8").


    Concernant les fins de ligne Windows-linux, voir cette FAQ et la suivante.

  3. #3
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    Bonjour,

    Il s'avere que j'ai besoin d'une méthode portable.

    Apres des heures de tests et de vérifications, j'ai quelques pistes sur le non-fonctionnement de mon code existant, qui a un peu de mal avec l'encodage UF8 (sans BOM) et ANSI avec des fichiers au format windows (fin de ligne \r\n ).
    C'est donc un soucis isolé et pas un probleme généralisé.

    Je m'appuye sur les sources de notepad++ pour détecter et convertir les formats

  4. #4
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    Je viens de trouver pourquoi j'ai des soucis de reconnaissance à la détection de la chaine en UTF8 :

    La lecture se fesait en mode texte et non binaire, ce qui implique que les \r\n sont convertit en \n automatiquement par la STL.
    Seulement, la taill de la chaine fait toujours le nombre d'octets du départ, soit 1 octet de plus par fin de ligne, ce qui implique un décalage et surtout, une lecture des dernier carateres dans une zone mémoire non alouée, d'où les erreur car les caracteres ne sont plus dans le scope de l'UTF8 !

    Tout ça pour ça oui... je n'ai pas terminé, mais j'en aurais appris des choses sur l'encodage et les fin de ligne

Discussions similaires

  1. Lecture de fichiers et encodage
    Par sliderman dans le forum Langage
    Réponses: 2
    Dernier message: 09/04/2008, 20h23
  2. lecture fichiers ASCII avec séparateur
    Par thierry007 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 11/04/2007, 13h25
  3. Réponses: 5
    Dernier message: 15/11/2006, 11h43
  4. Lecture d'un nombre binaire dans un fichier ASCII
    Par semenzato dans le forum MFC
    Réponses: 1
    Dernier message: 13/04/2006, 22h41
  5. vitesse de lecture d'un fichier ascii
    Par yan dans le forum C++
    Réponses: 5
    Dernier message: 31/01/2006, 14h43

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