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

Linux Discussion :

Programmes et UTF-8


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Par défaut Programmes et UTF-8
    Bonjour,

    Je fais appel à vous car j'avoue que sur ce point, je ne m'y connais vraiment pas trop, et j'ai du mal à trouver des solutions sur le net.

    J'ai un programme A (en C) qui exécute un programme B et qui récupère du texte sur la sortie standard de B grâce à un pipe (ainsi que le code de retour).
    Pour faire pragmatique, voilà comment je le fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void execute_check(char *ret, int *retcode, char *command) {
      FILE *pipe;
      sprintf(ret,"%s%s",PLUGDIR,command);
      pipe=popen(ret,"r");
      fgets(ret,1024,pipe); // on met le texte retourné, dans "ret"
      int rc = pclose(pipe);
      *retcode = WEXITSTATUS(rc); // on récupère le code de retour
    }
    Une fois le texte retourné, je l'envoie dans une base de données.
    Le problème est que le programme B peut retourner du texte avec des accents, et je me retrouve donc bien entendu avec des caractères non désirés, dans la base de données (par exemple "répondu" à la place de "répondu").

    D'où ma question : où se trouve le problème dans la chaîne de traitement ? Est-ce au moment de stocker le texte dans une variable qu'il faut faire en sorte que l'encodage soit UTF-8 ?
    Et également, comment faire ?

    Merci.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Normalement, si ta bdd est encodée en UTF8, la fonction INSERT fera elle-même la conversion.
    Mais faut faire hyper gaffe entre "ce que tu vois à l'écran" et "ce que tu as réellement"...
    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 du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Par défaut
    Et bien j'ai pourtant indiqué "utf8_general_ci" dans l'interclassement (mysql avec phpmyadmin)

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par G-FACTION Voir le message
    Et bien j'ai pourtant indiqué "utf8_general_ci" dans l'interclassement (mysql avec phpmyadmin)
    Attention !!! L'interclassement c'est la façon de faire qu'aura le moteur bdd lors des tris. Il saura que "e" et "é" sont la même lettre et doit se mettre avant le "f". Mais ce n'est pas le codage des caractères.
    Faut cibler le problème. A mon avis, tu devrais essayer de remplir des valeurs à la main depuis une console et vérifier avec un select si les caractères sont bien entrés correctement. Parce que si tu passes par phpMyAdmin, tu affiches alors via un navigateur et ça peut aussi venir de là. Fais gaffe aussi à avoir configuré correctement ta console pour qu'elle sache afficher en utf8.

    Je me souviens avoir galéré une fois en Python parce que j'affichais une data et les accents étaient à chier. Et je galérais entre "fromUtf8" et "toUtf8" et que je te le mettais dans un sens et que je te le mettais dans l'autre. Jusqu'au moment où j'ai compris que la data était parfaite mais que c'était mon print de debug qui ne convertissait pas correctement. Donc faire hyper gaffe à ton outil de vérif...
    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]

Discussions similaires

  1. Programmer - ANSI ou UTF-8
    Par CIFQ_Drew dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 01/12/2007, 22h10
  2. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  3. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  4. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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