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 :

absence de conversion de locale vers utf8 dans un code


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut absence de conversion de locale vers utf8 dans un code
    Bonjour ! J'ai encore une question à propos du tuto GTK+ par l'exemple : dans le chapitre 8 on convertit le contents du codage locale vers utf8, tandis que dans la même fonction dans le chapitre 9 on ne le fait plus. La fonction a été un peu modifiée entre les deux chapitres, mais je ne comprends pas pourquoi il n'y a plus la conversion locale vers utf8...

    dans le chapitre 8 :
    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
    static void open_file (const gchar *file_name, GtkTextView *p_text_view)
    {
      g_return_if_fail (file_name && p_text_view);
      {
        gchar *contents = NULL;
     
        if (g_file_get_contents (file_name, &contents, NULL, NULL))
        {
          /* Copie de contents dans le GtkTextView */
          gchar *utf8 = NULL;
          GtkTextIter iter;
          GtkTextBuffer *p_text_buffer = NULL;
     
          /* Pour l'instant il faut allouer la memoire, par la suite on modifiera
             simplement le pointeur */
          docs.actif = g_malloc (sizeof (*docs.actif));
          docs.actif->chemin = g_strdup (file_name);
          /* Pour l'instant, on se contente de stocker le seul GtkTextView qui existe,
            par la suite, il faudra en creer un nouveau ! */
          docs.actif->p_text_view = p_text_view;
          /* Le document vient d'etre ouvert, il n'est donc pas modifie */
          docs.actif->sauve = TRUE;      p_text_buffer = gtk_text_view_get_buffer (p_text_view);
          gtk_text_buffer_get_iter_at_line (p_text_buffer, &iter, 0);
          utf8 = g_locale_to_utf8 (contents, -1, NULL, NULL, NULL);
          g_free (contents), contents = NULL;
          gtk_text_buffer_insert (p_text_buffer, &iter, utf8, -1);
          g_free (utf8), utf8 = NULL;
        }
        else
        {
        	print_warning ("Impossible d'ouvrir le fichier %s\n", file_name);
        }
      }
    }
    dans le chapitre 9 :
    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
    static void open_file (const gchar *file_name, GtkTextView *p_text_view)
    {
      g_return_if_fail (file_name && p_text_view);
      {
        gchar *contents = NULL;
     
        if (g_file_get_contents (file_name, &contents, NULL, NULL))
        {
          /* Copie de contents dans le GtkTextView */
          GtkTextIter iter;
          GtkTextBuffer *p_text_buffer = NULL;
     
          cb_new (NULL, p_text_view);
          gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE);
          p_text_buffer = gtk_text_view_get_buffer (p_text_view);
          gtk_text_buffer_get_iter_at_line (p_text_buffer, &iter, 0);
          gtk_text_buffer_insert (p_text_buffer, &iter, contents, -1);
          /* Nous sommes obliges de remetre sauve a TRUE car l'insertion du contenu
             du fichier dans le GtkTextView a appele cb_modfie */
          docs.actif->sauve = TRUE;
        }
        else
        {
        	print_warning ("Impossible d'ouvrir le fichier %s\n", file_name);
        }
      }
    }
    le dernier code fait appel à cb_new():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void cb_new (GtkWidget *p_widget, gpointer user_data)
    {
      /* Pour l'instant il faut allouer la memoire, par la suite on modifiera
         simplement le pointeur */
      docs.actif = g_malloc (sizeof (*docs.actif));
      docs.actif->chemin = NULL;
      /* Pour l'instant, on se contente de stocker le seul GtkTextView qui existe,
        par la suite, il faudra en creer un nouveau ! */
      docs.actif->p_text_view = GTK_TEXT_VIEW (user_data);
      /* Le document vient d'etre creer, il n'est donc pas modifie */
      docs.actif->sauve = TRUE;
      gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE);
    }
    D'autre part dans cb_new on voit qu'on utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE);
    donc pourquoi le remettre dans cb_open_file (dans le chapitre 9) alors qu'on fait appel à cb_new juste avant ?
    Merci pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Ma position sur le sujet, c'est qu'il ne faut pas utiliser g_locale_*, mais les gens qui font les tutoriaux adorent en mettre. Pas de commentaire à ajouter en dehors de ça

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Bah, ça améliore la portabilité du programme, non ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    De quelle façon? Au contraire, ça rend ton programme dépendant de la locale que tu as choisie d'utiliser, alors que si tu mets toutes tes chaînes en utf8, tu n'as pas ce pb, ça sera interprété pareil partout.

    PS: j'ai relu le code que tu as donné, c'est utilisé pour convertir des données entréees par l'utilisateur, donc effectivemnet pourquoi pas, c'est même mieux

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    j'ai relu le code que tu as donné, c'est utilisé pour convertir des données entréees par l'utilisateur, donc effectivemnet pourquoi pas, c'est même mieux
    justement, l'auteur le retire à partir du chapitre 9 et je n'y vois pas de raison...

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    PS: j'ai relu le code que tu as donné, c'est utilisé pour convertir des données entréees par l'utilisateur, donc effectivemnet pourquoi pas, c'est même mieux
    Sauf que rien ne garantie que le fichier est au même encodage que le système, mais c'est mieux que rien, ce n'est pas évident de faire un bon convertisseur.

    Citation Envoyé par minibus Voir le message
    justement, l'auteur le retire à partir du chapitre 9 et je n'y vois pas de raison...
    Sûrement un problème de copier/coller

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    justement, l'auteur le retire à partir du chapitre 9 et je n'y vois pas de raison...
    Sûrement un problème de copier/coller
    OK, merci !
    et pour l'utilisation deux fois de suite de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE);
    C'est juste une erreur d'inattention, ou j'ai mal compris quelque chose ?

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par minibus Voir le message
    OK, merci !
    et pour l'utilisation deux fois de suite de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_set_sensitive (GTK_WIDGET (docs.actif->p_text_view), TRUE);
    C'est juste une erreur d'inattention, ou j'ai mal compris quelque chose ?
    C'est aussi une bonne remarque

    Peux-tu les reporter dans le sujet de l'article : http://www.developpez.net/forums/d65...gtkp-lexemple/ ?

    ça évitera que d'autres se posent la question, et ça m'évitera d'oublier de corriger


  9. #9
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    J'ai laissé un petit commentaire, merci de m'avoir éclairé !

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

Discussions similaires

  1. Conversion vers UTF8 hexa
    Par bractar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/11/2010, 18h51
  2. Réponses: 1
    Dernier message: 18/08/2010, 11h55
  3. Erreur UTF8 dans la conversion MATLAB - Scilab
    Par nicollivier dans le forum Scilab
    Réponses: 2
    Dernier message: 26/02/2010, 10h06
  4. Conversion d'une base utf16 vers UTF8
    Par studenttours dans le forum Requêtes
    Réponses: 0
    Dernier message: 22/04/2008, 11h07
  5. [Dates] Conversion heure GMT vers heure local
    Par ggjedi dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2006, 10h17

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