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 :

Encodage d'un fichier texte


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Encodage d'un fichier texte
    Bonjour,

    J'aimerai faire un programme qui me permet de changer l'encodage d'un fichier texte. Je ne connais pas l'encodage du fichier texte de départ et je veux l'encoder en UTF-8.

    Voici un extrait des fichiers textes (ce sont des fichiers sous titres de film) :

    4
    00:00:37,705 --> 00:00:41,249
    Mari, pËre, pharmacien
    et parfait gentleman,


    5
    00:00:42,167 --> 00:00:45,002
    rÈsidant ‡ Greenberry Hill, Londres.


    6
    00:00:45,546 --> 00:00:49,424
    AssassinÈ par trois vagabonds
    au simple motif du vol.




    Je ne sais pas si j'ai la bonne méthode, en fait au lieu de faire un chercher-remplacer manuel ( '‡' => 'à' , 'È' => 'é' , etc...) directement dans le fichier texte je veux automatiser ces opérations grâce à un programme.

    Donc pour l'instant je suis parti avec ce code :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <stdlib.h>
    #include <stdio.h>
     
    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
     
        fichier = fopen("test.srt", "r+");
     
        if (fichier != NULL)
        {
            // Boucle de lecture des caractères un à un
            while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF
            {
    			caractereActuel = fgetc(fichier); // On lit le caractère
                printf("%c", caractereActuel); // On l'affiche
    			switch (caractereActuel)
    			{
    				case '':
    					printf("â");
    					break;
    				case 'È':
    					printf("é");
    					break;
    				case '':
    					printf("à");
    					break;
    				case 'Á':
    					printf("ç");
    					break;
    				case '«':
    					printf("Ç");
    					break;
    				case 'Ù':
    					printf("ô");
    					break;
    				case '˚':
    					printf("û");
    					break;
    				case 'Ë':
    					printf("è");
    					break;
    				case 'Í':
    					printf("ê");
    					break;
    				case '˘':
    					printf("ù");
    					break;
    				case 'Ó':
    					printf("î");
    					break;
    				case '¿':
    					printf("À");
    					break;
    				case 'Ô':
    					printf("ï");
    					break;
    				case 'ú':
    					printf("œ");
    					break;
    				case '':
    					printf("É");
    					break;
    				case '»':
    					printf("È");
    					break;
    			}
            }
     
            fclose(fichier);
        }
     
        return 0;
    }

    Lorsque je compile il me dit comme erreur "multi-character character constant" pour chaque 'case' où j'utilise un caractère exotique (par exemple : case '‚'). Lorsque je remplace ces caractères par d'autres plus classique comme 'e' ou 'a' l'erreur disparaît et tout se passe bien. Du coup j'ai essayé d'inclure la bibliothèque ctype.h mais ça ne change rien. Je ne sais plus quoi faire !





    J'ai oublié de préciser mais le code que j'ai présenté plus haut n'est pas fini, vous avez du remarquer que pour l'instant je lis juste le fichier texte mais je ne remplace pas les caractères. Pour l'instant je les écrit juste dans le terminal.

    PS : le code dans XCode est bien écrit en UTF-8 :



    Voilà donc je suis sur mac, je compile avec le terminale et je code avec XCode. Je suis débutant en programmation et c'est mon premier programme en C (merci les tutos d'ailleurs !).

    Je pense que j'ai dors et déjà perdu plus de temps à coder le programme que je pourrai en gagner lorsque la tâche sera automatisé, m'enfin bon c'est aussi surtout pour progresser que je fais ça !

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Sans connaitre l'encodage initial, ça me parait difficile. C'est comme si tu disais "j'ai un type qui me parle dans sais pas quelle langue et je voudrais le traduire en anglais"...

    Bon, à mon avis, on peut toutefois présumer que ton fichier texte est en ascii de base. Donc si c'est juste pour l'encoder en utf-8, t'as notepad++ qui fait déjà très bien ce travail. C'est dans un des menus "convertir en utf-8". Et sous Linux t'as le programme "iconv" qui le fait aussi. Ce programme s'appuie sur une librairie libiconv. Donc (sous réserve que cette librairie existe sous mac ou que tu puisses la récupérer) rien ne t'empêche de l'utiliser...

    PS: pour un début en C tu commences fort...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Le problème que l'erreur « multi-character character constant » te signale vient du fait qu'en UTF-8, les caractères peuvent être écrits sur plusieurs octets.

    À part les 128 premiers caractères (qui correspondent à l'encodage ASCII), les symboles ne rentrent pas dans un simple char.
    Par exemple, la lettre « A » occupera 1 octet de ton ficher, mais le caractère « … », si ton fichier est encodé en UTF-8, sera représenté avec 3 octets (voir image).

    Manipuler un document Unicode est bien plus compliqué que de l'ASCII.
    Tu devras manipuler des string plutôt que des char, ou bien utiliser une bibliothèque spécialisée selon tes besoins.

    D’autre-part, la syntaxe &#nb; utilisée en XML/HTML n'a aucun sens en C.
    Images attachées Images attachées  
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok, je vous remercie tous les deux.

    Donc après quelques temps à bidouiller les encodages du fichier texte avec XCode je me rend compte que à la base, le fichier sous-titres est encodé en latin-1 mais que mon éditeur de texte mac et VLC lisent les fichiers en UTF-8. C'est pour cette raison que je voit des caractères bizarres.

    Il faut donc ouvrir le fichier sous titres avec XCode en lui disant de le lire en latin-1, puis il faut le convertir en UTF-8 et le tour est joué !

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Alpachio Voir le message
    Il faut donc ouvrir le fichier sous titres avec XCode en lui disant de le lire en latin-1, puis il faut le convertir en UTF-8 et le tour est joué !
    Moui, ce que fait aussi notepad++ (et certainement beaucoup d'autres éditeurs)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui oui, je voulais dire Xcode, Notepad++ ou les autres éditeurs, chez moi c'est Xcode en tous cas (mac).

    Merci encore, a+

Discussions similaires

  1. Détecter l'encodage d'un fichier texte
    Par Emcy dans le forum Algorithmes et structures de données
    Réponses: 32
    Dernier message: 27/01/2011, 14h34
  2. Deviner l'encodage d'un fichier TEXTE
    Par rambc dans le forum Général Python
    Réponses: 10
    Dernier message: 10/07/2010, 17h16
  3. Réponses: 2
    Dernier message: 19/10/2009, 21h36
  4. Comment connaître l'encodage d'un fichier texte?
    Par sergentgarcia dans le forum Général Python
    Réponses: 3
    Dernier message: 26/05/2008, 10h41
  5. Gérer l'encodage d'un fichier texte
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 15/05/2007, 10h24

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