Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHARSET CONVERTER LIBRARY


Information sur la source

Catégorie :Système Classé sous : charset, iso8859, unicode, utf, encodage Niveau : Expert Date de création : 03/04/2006 Vu / téléchargé: 9 592 / 596

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

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

  • #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;
  • }
#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
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   charset

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 04/04/2006 00:03:33 administrateur CS

char caEAscii[iStrLen];
Quel compilo accepte cela ???

signaler à un administrateur
Commentaire de Alcantornet le 04/04/2006 08:01:07

Je suis sous dev-cpp donc gcc

signaler à un administrateur
Commentaire de Taron31 le 04/04/2006 11:49:46

En effet c'est étrange... normalement la taille d'n tableau doit être statique lors de la compilation :s

signaler à un administrateur
Commentaire de Kaid le 04/04/2006 20:03:33

C'est une nouveauté de la norme C99: "Variable Length Arrays".

signaler à un administrateur
Commentaire de excrt le 13/04/2006 20:12:08

Alcantornet, soit tu changes l'extension de tes fichiers .c en .cpp ou tu modifies tes options de compilations. En C, les variables doivent être déclarés en début de scope, pas en plein centre ...
C'est du C++ ton truc, pas du C. En passant, les « inclusions multiples » ca te dis quelque chose?
Puisque ton truc c'est du C++, utilise « #pragma once », sinon vas-y avec un « #ifndef xyz_h ... » ...

signaler à un administrateur
Commentaire de excrt le 13/04/2006 20:16:31

J'oubliais, pour les wide-chars, il existe <wchar.h>, pas le peine de définir ton « wchar »

#include <wchar.h> /* wchar_t */
/*
* incluant wcslen()/wcscpy()/wcsncpy()/wcscat()/wcsncat()/wcscmp()/...
*/
type callconv function( [const ]wchar_t* string[, ...] );


signaler à un administrateur
Commentaire de Alcantornet le 18/04/2006 14:59:51

ouahhahh, doucement...

Bon il y a pas longtemps que j'essai de faire du C et non pas du C++, je connais pas beaucoup les différences entre C et C++.

Pour l'histoire des inclusions multiples il faut que je rajoute ceci:

#ifndef _CHARSET_H_
#define _CHARSET_H_

... le contenu actuelle ...

#endif

c'est juste ? je connais pas le #pragma once ça le même effet ?

En ce qui concerne le wchar_t, je croyais que c'était du C++ uniquement (bon apparement je me trompait, mais je suis pas le seul puisque j'ai lu ça sur un autre forum).

Merci :-) au moins j'ai appris qqch.

signaler à un administrateur
Commentaire de excrt le 18/04/2006 16:45:05

//
// 1) C++ ONLY
//
#pragma once // tu mets ca au tout début de tes fichiers .h, c'est tout
// contenue du fichier .h ...


/*
* 2) C/C++
*/
#ifndef FILENAME_H
#define FILENAME_H
  /* contenue du fichier .h ... */
#endif



pour le « wchar_t », non en effet, il est dispo en C et en C++.
C   => <wchar.h>
C++ => <cwchar>


signaler à un administrateur
Commentaire de magic_Nono le 01/12/2006 11:44:27

plutot que tous tes define, un petit énum et le tour est joué

signaler à un administrateur
Commentaire de ricoos le 18/10/2007 18:05:34

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

signaler à un administrateur
Commentaire de Alcantornet le 18/10/2007 21:11:35

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é)

signaler à un administrateur
Commentaire de Kian_ix le 04/09/2008 04:09:34

13 erreurs, 384 warnings, qui dit mieux ^^

signaler à un administrateur
Commentaire de Kian_ix le 04/09/2008 04:49:25

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;
}

signaler à un administrateur
Commentaire de Alcantornet le 04/09/2008 20:09:27

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comment afficher de l'unicode sur un RichEdit ??? [ par popi0016 ] Bonjour j'ai deja ouvert le probleme et avec vos reponses et mes recherches voici ou j'en suis ... //------------------------------------------------- encodage fichier texte en UTF-8 [ par mark01 ] Bonjour,j'ai lu de nombreux messages sur ce sujet mais je ne trouve pas ce qu'il me faut...Voilà mon problème:je developpe une appli en deux parties, Encodage UTF-8 vers ISO-8859-15 [ par katsankat ] Bonjour à tous,J'essaie de convertir une chaîne encodée en UTF-8 vers l'ISO-8859-15.L'UTF-8 encode les caractères sur un ou plusieurs octets, ainsi je Question \0 et unicode , ISO-8859-15 [ par layoutl ] Bonjour, J'utilise pour designer la fin d'une chaine, le caractere \0, mais avec l'unicode / UTF-8 / ISO-8859-15 ... cela ne pose-t-il pas de proble Unicode ou UTF-8 ? [ par HeavenForsaker ] Bonjour,J'aimerai savoir quel est la différence entre ces 2 types de codage. Je croyais que c t la même chose mais visiblement non, le notepad propose Fichier ini UTF-8 [ par HeavenForsaker ] Bonjour,Voici mon problème, je dois lire le contenu d'un fichier .ini encodé en UTF-8 pour se faire j'utilise l'api GetPrivateProfileString, sur un fi Utilisation des accents avec Wxwidgets unicode [ par uko ] Bonjour,    J'utilise Code::blocks et wxWidgets 2.8.4 que j'ai compilé avec UNICODE=1 sous windows XP. Lorsque j'ai besoin d'utiliser les accents dans Ecrire un programme unicode avec VC6 [ par Mr.X ] Bonjours.Je voudrais savoir s'il est possible d'écrire un programme unicode avec Visual C++ 6.0.J'ai vu qu'il y avais des defines comme _UNICODE, mais enregistrement d un fichier en unicode [ par ouamtax ] Bonjour,Dans mon application je dois enregistrer des informations provenant d'une base de données dans un fichier xml. j'ai utilisé                fil écrire des nombres dans un fichiers [ par leuk ] Salut,J'essaie d'écrire des nombre dans un fichier texte en utilisant WriteFile(). Je précise que c'est de l'unicode j'arrive trés bienà écrire un tex


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.