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

 C++ Discussion :

Conversion Fichier Ascii vers Unicode (et Unicode vers Ascii)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Par défaut Conversion Fichier Ascii vers Unicode (et Unicode vers Ascii)
    Bonjour,

    Après avoir effectuer de nombreuses recherches sur le sujet, je me suis inscrit sur ce forum pour demander votre aide.
    Mon besoin est le suivant : Convertir un fichier Unicode vers un format classique Ascii, effectuer des modification sur le fichier et finalement, reconvertir le fichier Ascii vers un format Unicode.

    Actuellement je le fais avec un VBS, malheureusement, pour des soucis d'optimisation de temps (je travail sur des fichiers très lourds) je souhaitais l'écrire en langage compilé.

    Les quelques propositions sur internet, autour de ce sujet, ne m'ont pas permis d'aboutir à un résultat viable. Peut-etre ai-je mal adapté les codes fournis ... même l'aide de Microsoft sur le sujet n'a pas pu m'aider.

    Le codage en C++ n'est pas une fin en soit pour le développement mais serait un plus pour la suite de mon programme.

    Merci d'avance, en espérant que vous pourrez m'aider à résoudre mon problème.

    Cordialement.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Une des questions à garder à l'esprit, c'est: Quelle est la consigne quant aux caractères qui ne sont pas dans l'ASCII? Les jeter? Les remplacer par un caractère spécial, toujours le même (souvent un point ou point d'interrogation) ? Tenter d'y substituer des caractères proches (ex: transformer é en e) ?
    À différents besoins correspondent différentes possibilités, et certaines options sont plus faciles que d'autres.

    Edit: Autre question: Quel format Unicode? Sans autre information, je subodore que tu parles d'UCS-2 ou UTF-16? En gros, caractères sur 16 bits, probablement en little-endian?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Par défaut
    Bonjour,

    Tout d'abord, merci pour votre réponse rapide.

    En effet, il s'agit "probablement" de little-endian (la conversion est "propre" via notepad++).
    A priori, il n'y a pas d'accent dans le fichier. S'il y-en a c'est a l'utilisateur de le corriger et non pas au programme.

    Cordialement.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans ce cas, tu peux directement faire de la lecture binaire vers un tableau de unsigned short, copier en castant vers un tableau de char (en crachant une erreur pour toute valeur non-comprise entre 0 et 127 inclus), puis faire ton boulot dessus.

    Pour ne pas charger tout le fichier UCS-2 en mémoire, il peut être une bonne idée de faire la lecture avec une boucle, et utiliser un buffer de unsigned short relativement petit par rapport à la vraie destination.


    Et pour réécrire le fichier, faire la même chose en sens inverse: Remplir le buffer de unsigned short en castant, puis écriture binaire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Par défaut
    Bonjour,

    Je pense avoir compris la méthode pour le passage Unicode -> Ascii. Identifier les caractère du fichier par leur identifiant binaire et garder ceux inférieurs à 127.
    Il s'agit donc de supprimer des caractères, en revanche pour le passage vers l'Unicode, il va falloir ajouter de nouveaux caractères et auquel cas lesquels ?

    Merci pour votre aide, cordialement.

    EDIT : N'existe t'il pas des fonctions déjà toutes faites en chargeant une certaine librairie sinon ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour convertir de l'ASCII vers l'UTF-16, il n'y a rien à ajouter, à moins que tu veuilles trouver un moyen de "restaurer" les caractères qui avaient été supprimés lors de la conversion vers ASCII (bonne chance). Pour convertir de l'ASCII vers l'UTF-16, il suffit de caster chaque char en unsigned short: tous les codes ASCII (0-127) sont des codes UTF-16 valides.


    Il y a déjà des fonctions en effet: Certaines en C standard (mais pas vraiment spécifiques à ASCII et UTF-16), et d'autres dans l'API Windows: MultiByteToWideChar() convertit vers l'UTF-16, et WideCharToMultiByte() convertit depuis l'UTF-16 vers divers encodages, dont ASCII pur (Page de codes 20127) (et en plus, à moins que tu passes un flag pour le refuser, elles font la substitution pour les caractères qui n'existent pas dans l'encodage de destination (ici, les caractères non-ASCII).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [phpMyAdmin] Conversion fichier MYD vers SQL.
    Par je-suis-moi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 19/06/2009, 23h09
  2. Probleme conversion fichier provenant d'une base oracle vers une base mysql
    Par jonnyboy dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 18/06/2009, 09h40
  3. Conversion fichiers Clarion vers Hyperfile
    Par avc19 dans le forum HyperFileSQL
    Réponses: 3
    Dernier message: 31/03/2009, 17h04
  4. conversion fichier vers .HLP
    Par kadis500 dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/05/2008, 16h15
  5. Conversion fichier plat vers CSV
    Par linar009 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/11/2006, 13h35

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