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 et decodage


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Points : 20
    Points
    20
    Par défaut encodage et decodage
    Bonjour,

    Voilà mon problème : j'ai d'un cote une appli java (le problème C arrive aprés) qui insère du texte dans une base de données. Certains caractères sont encodés car la BD ne les supportent pas. Pour ça, on utilise ceci :

    String insere= new String (orig.getBytes("UTF-8"), "ISO-8859-1");

    où orig est le texte à encoder récupéré via une IHM et insere le texte inséré en base aprés traitement.

    Dans cette appli, on fait tout simplement l'operation inverse pour revoir notre chaine :

    String display = new String (bd.getBytes("ISO-8859-1"), "UTF-8");

    où display est la chaine traitee pour etre affichee et bd la chaine extraite de la BD.

    Tout ça marche trés bien.

    Voilà mon souci C :

    Je dois récupérer les données de cette même BD avec une appli écrite en C (et pas la peine de me dire de passer en Java, pas possible!) et j'aimerais savoir comment effectuer la conversion inverse (la deuxième) en C pour pouvoir afficher les bons caractères ?

    Merci pour votre aide.

  2. #2
    Membre du Club Avatar de Menthe_a_l_eau
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 50
    Points
    50
    Par défaut
    Salut !

    Trouve la table hexa de l'iso et de l'utf
    Ensuite tu fais une conversion avec ces donnees, a la main -> http://www.table-ascii.com/

  3. #3
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Sur un unixoide tu peux surement utiliser libiconv qui devrait répondre a ton besoin

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Zul, peux-tu préciser s'il te plait ce dont tu parles ?

    Merci

  5. #5
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    libiconv est une librairie qui permet de convertir des données d'un encodage A a un encodage B. Tu peux te la procurer ici http://www.gnu.org/software/libiconv/. La documentation est en bas de page.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse, je vais aller voir ça.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    J'ai donc essayé iconv et je dois manquer une étape quelque part.

    Voici un exemple de ce que je fais :

    ma chaine de départ : …éè (le premier caractère est le caractère unicode 2026)


    Aprés décodage en C, j'écris la chaine résultante dans un fichier et j'obtiens ceci : ⿦éè

    Le caractère 2026 n'est pas décodé.

    Des idées ?
    Merci de votre aide

  8. #8
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Peut-etre pourrais tu nous montrer ton code ? Ca aiderait suerment a comprendre ce qui ne va pas

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    voilà le 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
    static char* iconv_(char* s, char* from_charset, char* to_charset) {
            iconv_t cd = iconv_open(to_charset, from_charset);
            char* retval = s;
            if (cd != (iconv_t) (-1)) {
                    size_t s_len = strlen(retval);
                    /* the maximum expansion when converting happens when converting
                       tscii to utf-8; each tscii char can become up to 4 unicode chars
                       and each one of those unicode chars can be 3 bytes long */
                    char *buf = malloc(4 * 3 * s_len);
                    {
                            char *ptr = buf;
                            size_t ptr_len = 4 * 3 * s_len;
                            if ((iconv(cd, &s, &s_len, &ptr, &ptr_len)) != (size_t) (-1)) {
                                    *ptr = 0;
                                    retval = buf;
                            }
                    }
                    iconv_close(cd);
            }
            return strdup(retval);
    }
     
     
    cConvertString = iconv_(cValue, "UTF-8", "ISO-8859-1");
     
       /* ecriture dans un fichier
       */
       GL_WriteFile ("c:/poub/essai_char.txt", cConvertString);
    cValue est la chaine à convertir, qui a été chargée depuis la base de données.

    Merci

Discussions similaires

  1. Fonction d'encodage et decodage
    Par romayn dans le forum Langage
    Réponses: 6
    Dernier message: 11/12/2013, 17h38
  2. Encodage / Decodage :: Cle RSA
    Par Jonathan.Harvey dans le forum Sécurité
    Réponses: 15
    Dernier message: 03/03/2011, 10h06
  3. Encodage/Decodage UTF-8 de données XML
    Par TickerOpcvm dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2008, 14h59
  4. [AJAX] encodage-decodage URL avec Java et Javascript
    Par alfreedd dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/06/2007, 13h45
  5. Problème encodage-decodage URL avec Java et Javascript
    Par alfreedd dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 27/04/2007, 12h11

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