Charset converter library

Soyez le premier à donner votre avis sur cette source.

Vue 13 814 fois - Téléchargée 777 fois

Description

Ce sont quelques fonctions qui permettent de convertir une chaîne de caractères dans des différents encodage.
Permet de faire des conversions entre l'ascii étendu, le latin1 (ISO-8859-1),l'Unicode et l'utf 8.

Voici les fonctions présente dans la source charset.c

unsigned int easciiToIso8859(const char * capSrc,unsigned int iSrcLen,char * capDest,unsigned int iDestLen);
unsigned int iso8859ToUnicode(const char * capSrc,unsigned int iSrcLen,wchar * wcapDest,unsigned int iDestLen);
unsigned int unicodeToUtf8(const wchar * wcapSrc,unsigned int iSrcLen,char * capDest,unsigned int iDestLen);
unsigned int utf8ToUnicode(const char * capSrc,unsigned int iSrcLen,wchar * wcapDest,unsigned int iDestLen);
unsigned int unicodeToIso8859(const wchar * wcapSrc,unsigned int iSrcLen,char * capDest,unsigned int iDestLen);
unsigned int iso8859ToEascii(const char * capSrc,unsigned int iSrcLen,char * capDest,unsigned int iDestLen);

Source / Exemple :


#include <stdio.h>
#include "charset.h"

int main(int iNbArg,char ** capArg){
    // Chaîne Iso8859-1
    char caSrc[]="héhé ça va bien ?";
    int iStrLen = strlen(caSrc),ret;
    printf("ISO-8859: %s\n",caSrc);
    
    // Nouvelle chaîne en Ascii étendu
    char caEAscii[iStrLen];
    ret = iso8859ToEascii(caSrc,iStrLen,caEAscii,iStrLen);
    caEAscii[ret] = 0;
    printf("Extended Ascii: %s\n",caEAscii);
    
    // Nouvelle chaîne en unicode
    wchar caU[iStrLen];
    ret = iso8859ToUnicode(caSrc,iStrLen,caU,iStrLen);
    caU[ret] = 0;
    
    // Nouvelle chaîne en UTF-8
    char caUTF[iStrLen*3];
    ret = unicodeToUtf8(caU,iStrLen,caUTF,iStrLen*3);
    caUTF[ret] = 0;
    printf("UTF-8: %s\n",caUTF);
    
    // Il exist aussi les fonctions inverse
    // utf8ToUnicode
    // unicodeToIso8859
    // iso8859ToEascii
    system("pause");
    return 0;
}

Conclusion :


Le code ci-dessus est un simple exemple d'utilisation de charset.c

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Mon code remonte à longtemps, ça fait plaisir qui soit encore utile à qqun. Bon j'utilisais dev-Cpp à l'époque et j'avais ni d'erreur ni de warnings. Mais avec un autre compilateur je c'est pas comment il se comporte.
Messages postés
26
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
5 avril 2009

simplification au maxi:

int To_utf8(char * val) {
int size = strlen(val);

wchar * caU = (wchar*)malloc(size+5);
int ret = iso8859ToUnicode(val,size,caU,size);
caU[ret] = '\0';

char * caUTF = (char*)malloc(size*4);
ret = unicodeToUtf8(caU,size,caUTF,size*4);
caUTF[ret] = '\0';

memset(val, '\0', size+5);
sprintf(val, "%s", caUTF);

return 0;
}

int To_iso8(char * val) {
int size = strlen(val);

wchar * caU = (wchar*)malloc(size+5);
int ret = utf8ToUnicode(val,size,caU,size);
caU[ret] = '\0';

memset(val, '\0', size+5);
ret = unicodeToIso8859(caU, ret, val, ret);
val[ret] = '\0';

return 0;
}
Messages postés
26
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
5 avril 2009

13 erreurs, 384 warnings, qui dit mieux ^^
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Salut Ricoos,

Je crois que c'est juste quand même (Bon c'est possible que je persiste dans mon erreur...).

Lorsqu'on écrit une chaîne de caractère dans un éditeur C cela donne une chaîne en iso8859 (à moins que tu n'utilise un IDE sous DOS :P), et donc pour convertir de iso8859 à Unicode, j'utilise caSrc vers caU.

PS: Le Ascii etendue est pas la même chose que iso8859;
PS2: Le Ascii etendue c'est l'ASCII normale avec en plus les caractère de 128 à 255 (avec le 8ème bit utilisé)
Messages postés
1
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
18 octobre 2007

excellent par sa simplicité
mais il y a un petit truc qui n'est pas logique dans l'exemple (par chance on trouve un bon resultat)
ligne 18
ret = iso8859ToUnicode(caSrc,iStrLen,caU,iStrLen);
on passe a la fonction comme 1er argument une chaine ASCII au lieu de passer la chaine Ascii etendue
corrigé ça fait ;
ret = iso8859ToUnicode(caEAscii,iStrLen,caU,iStrLen);

y a t'il un exemple pour utf8ToUnicode avec la taille en 4eme parametre (je ne peux que supposer c'est /3
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.