begin process at 2010 02 10 12:18:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > CHARSET CONVERTER LIBRARY

CHARSET CONVERTER LIBRARY


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : Alcantornet

Ecrire un message privé
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   charset

Télécharger le zip


 Sources du même auteur

Source avec Zip LIBRAIRIE 3DS GLUT
Source avec Zip CONVERTI UN TEXTE UNIX VERS DOS

 Sources de la même categorie

Source avec Zip Source avec une capture [C/WIN32/WMI]SAVOIR SI UNE CLASSE COM EST INSTALLÉE par rt15
Source avec Zip Source avec une capture [C/WIN32][DRIVER] DÉTECTION DE CRÉATION OU DE SUPPRESSION DE... par deck_bsd
Source avec Zip DÉTECTION DE LANCEMENT D'APPLICATION (WIN32, REGISTERSHELLHO... par buno
Source avec Zip Source avec une capture [C/WIN32] INJECTION DE DLL 2 MÉTHODES (REMOTETHREAD PROPRE &... par deck_bsd
PRODUCER CONSUMER C (WITHIN LINUX) par PCBill

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture APPLICATION MULTILINGUE UTILISANT UNICODE (WIN32) par racpp
Source avec Zip Source avec une capture ENCODAGE / DETECTION : UTF-8, UTF-16, ASCII, ISO 8859-1, 885... par benjarobin
Source avec Zip Source avec une capture DVD2AVI2 ---- ENCODAGE FICHIERS : VOB VERS AVI par JanMark
Source avec Zip CODE DECODE BASE64 (WIN32) par BruNews
Source avec Zip REMPLACE CRT - UNICODE (WIN64) par BruNews

Commentaires et avis

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

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

Commentaire de Alcantornet le 04/04/2006 08:01:07

Je suis sous dev-cpp donc gcc

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

Commentaire de Kaid le 04/04/2006 20:03:33

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

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 ... » ...

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[, ...] );


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.

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>


Commentaire de magic_Nono le 01/12/2006 11:44:27

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

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

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

Commentaire de Kian_ix le 04/09/2008 04:09:34

13 erreurs, 384 warnings, qui dit mieux ^^

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

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales