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

GTK+ avec C & C++ Discussion :

Problème avec les accents


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Problème avec les accents
    A l'aide de cette fonction je sélectionne et j'ajoute à une liste tous les mp3 contenu dans le dossier. Cependant j'ai un petit soucis car lorsque j'affiche le nom du fichier dans la console il n'affiche pas les caractères accentués alors que dans la liste qui s'affiche dans ma fenetre ces memes fichiers sont affichés avec les accents correctement.

    Le probleme arrive ensuite quand je double clique sur une ligne pour ouvrir le fichier qui lui correspond lorsque le nom n'a pas d'accent ca ouvre mais lorsqu'il en a sa n'ouvre pas pourtant j'ai bien converti en utf8 je suis un peu perdu....

    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
     
    void liste_fichiers(GtkWidget *widget, Tags *tag)
    {
            /// Variables
     
                const gchar *nom=NULL;
                const gchar *nom2=NULL;
     
            /// Listage du dossier
     
                tag->Chemin=Selection_repertoire();
                tag->repertoire = g_dir_open(tag->Chemin,0,NULL);
                gtk_list_store_clear(tag->liste);
     
                if(tag->repertoire!=NULL)
                {
                    while (nom = g_dir_read_name(tag->repertoire))
                    {
                        nom=g_locale_to_utf8(nom,-1,NULL,NULL,NULL);
                        printf("\n%s",nom);
                        nom2 = g_malloc (strlen (nom) + 1);
     
                        if (nom2 != NULL)
                        {
                            GtkTreeIter iteration;
                            strcpy ((gchar*)nom2, (gchar*)nom);
                            if(strstr(nom2,".mp3")!=NULL)
                            {
                                gtk_list_store_append(tag->liste,&iteration);
                                gtk_list_store_set(tag->liste,&iteration,TEXT_COLUMN,nom,-1);
                            }
                        }
                    }
     
                    g_dir_close(tag->repertoire);
                    gtk_widget_show_all(tag->vue);
                }

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    Coucou,

    Avec quelle fonction récupères-tu la ligne sélectionnée par le (double) clic de l'utilisateur ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    alors voila la fonction avec laquelle je récupère le chemin du dossier

    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
     
    gchar *Selection_repertoire()
    {
        /// Variables
     
       GtkWidget *dossier;
       gchar *Chemin;
     
        /// Instructions
     
            dossier = gtk_file_chooser_dialog_new(  "Selection du dossier",
                                                    NULL,
                                                    GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
                                                    GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,
                                                    NULL);
     
            gtk_window_set_modal(GTK_WINDOW(dossier), TRUE);
     
            switch(gtk_dialog_run(GTK_DIALOG(dossier)))
            {
                case GTK_RESPONSE_ACCEPT:
     
                /// Recuperation du chemin
     
                Chemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dossier));
                Chemin = g_locale_to_utf8(Chemin,-1,NULL,NULL,NULL);
                break;
     
                default: break;
            }
     
            gtk_widget_destroy(dossier);
            return Chemin;
     
    } // Fin Selection_repertoire
    et ca c'est la fonction qui va chercher a ouvrir le fichier suite a un double-clic sur un élément de la liste

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
     
    void lit_tag(GtkTreeView *vue ,GtkTreePath *path,GtkTreeViewColumn *colonne,Tags *tag)
    {
        GtkTreeIter iter;
        GtkTreeModel *modele;
        gchar *str = NULL;
        gchar *fichier=NULL;
        FILE *son=NULL;
     
        /// on place iter sur l'élément pointé par l'utilisateur
     
        modele = gtk_tree_view_get_model(vue);
        gtk_tree_model_get_iter(GTK_TREE_MODEL(modele), &iter, path);
        gtk_tree_model_get (modele, &iter, 0, &str, -1);
     
        str=g_locale_to_utf8(str,-1,NULL,NULL,NULL);
        fichier=g_strconcat (tag->Chemin,"\\",str, NULL);
        printf("\n%s",fichier);
     
        son=fopen(fichier,"r+");
     
        if(son!=NULL)
        {
            int i=0;
            int j=0;
            char c[128] = {'\0'};
            char titre[31], auteur[31];
            char album[31], annee[5];
            char commentaires[31]; char piste[3];
     
     
            fseek(son, -128 * sizeof(char), SEEK_END);
            while(fread(&c[i], sizeof(char), 1, son), !feof(son))
                {
                    i++;
                }
     
            if(c[0]=='T' && c[1]=='A' && c[2]=='G')
     
                {
                    /// Titre
     
                        j=0;
                        for(i=3;i<33;i++)
                        {
                            titre[j]=c[i];
                            j++;
                        }
                        titre[j]='\0';
                        tag->chaine=g_locale_to_utf8((gchar*)titre,-1,NULL,NULL,NULL);
                        gtk_entry_set_text(GTK_ENTRY(tag->stitre), titre);
                        gtk_widget_show(tag->stitre);
     
                    ///Artiste
     
                        j=0;
                        for(i=33;i<63;i++)
                        {
                            auteur[j]=c[i];
                            j++;
                        }
                        auteur[j]='\0';
                        tag->chaine=g_locale_to_utf8((gchar*)auteur,-1,NULL,NULL,NULL);
                        gtk_entry_set_text(GTK_ENTRY(tag->sartiste),auteur);
                        gtk_widget_show(tag->sartiste);
     
                    /// Album
     
                        j=0;
                        for(i=63;i<93;i++)
                        {
                            album[j]=c[i];
                            j++;
                        }
                        album[j]='\0';
                        tag->chaine=g_locale_to_utf8((gchar*)album,-1,NULL,NULL,NULL);
                        gtk_entry_set_text(GTK_ENTRY(tag->salbum),album);
                        gtk_widget_show(tag->salbum);
     
                    /// Année
     
                        j=0;
                        for(i=93;i<97;i++)
                        {
                            annee[j]=c[i];
                            j++;
                        }
                        annee[j]='\0';
                        tag->chaine=g_locale_to_utf8((gchar*)annee,-1,NULL,NULL,NULL);
                        gtk_entry_set_text(GTK_ENTRY(tag->sannee),annee);
                        gtk_widget_show(tag->sannee);
     
                    /** Suite en fonction de la version du Tag.
                        Si le caractère 125 est égale à NULL alors il s'agira d'un
                        tag de version 1.1 sinon il s'agira d'un tag de version 1.0
                        et la lecture de leur tags diffèrent après l'année de parution */
     
                    if(c[125]!='\0')
                    {
     
                        printf("\nversion 1");
     
                        ///Commentaires
     
                        j=0;
                        for(i=98;i<127;i++)
                        {
                            commentaires[j]=c[i];
                            j++;
                        }
                        commentaires[j]='\0';
                    }
     
                    else
                    {
                        printf("\nversion1.1");
                        /// Commentaires
     
                            j=0;
                            for(i=98;i<124;i++)
                            {
                                commentaires[j]=c[i];
                                j++;
                            }
                            commentaires[j]='\0';
     
                        /// Numero de piste
     
                            i=c[126];
                            sprintf(piste,"%d",i);
                            gtk_entry_set_text(GTK_ENTRY(tag->snumpiste),(gchar*)piste);
                            gtk_widget_show(tag->snumpiste);
                    }
     
                        tag->chaine=g_locale_to_utf8((gchar*)commentaires,-1,NULL,NULL,NULL);
                        gtk_entry_set_text(GTK_ENTRY(tag->scoms),commentaires);
                        gtk_widget_show(tag->scoms);
     
                        /// Genre
     
                            i=c[127];
                            if(i==-1) i=12;
                            printf("\nnumero genre : %d",i);
                            gtk_combo_box_set_active(GTK_COMBO_BOX(tag->sgenre),i+1);
     
            }
        fclose(son);
        }
     
    }

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    Pourquoi faire passer le nom du chemin retourné par la fonction
    gtk_file_chooser_get_filename par la fonction g_locale_to_utf8 ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    ben jtavoue ke jtestai sur un peu toute mes variables gchar pour m'assurer kel soit bien converti mais la fonction retourne le nom du dossier avec les caractères spéciaux sans avoir besoin de la convertir !!! mais le probleme viens po du dossier car j'arrive a ouvrir un dossier comme r&b_français donc c bon c au niveau du nom du fichier !!!!

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    et si tu ne reconvertis pas le nom de fichier sélectionné en utf8 ?

    edit : sinon tu ne prends pas en compte les fichiers dont le nom n'est pas valide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. XMLHTTP, problèmes avec les accents
    Par Berliozz dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32
  2. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

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