begin process at 2012 02 09 14:04:56
  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é :11 940 / 667

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 UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip PETITE CLASSE DE GESTION DES PROCESSUS SOUS WINDOWS par wisar
Source avec Zip KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FO... par wisar
Source avec Zip LINUX USB BOOT LEGER par patatalo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ENCODAGE D'ANIMATIONS QT AU FORMAT GIF par opossum_farceur
Source avec Zip PARSER XML par MagnumPP
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

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 UTF_8 vers UNICODE [ par mervat ] salut, j'ai une question et j'espère avoir la réponse qui pourra tellement m'aider. je veux copier le contenu d'un fichier UTF-8 dans un fichier UNICO changer l'encodage d'un fichier texte [ par snake57 ] Bonjour à tous, J'ai un fichier texte que je suis obligé d'ouvrir dans le format d'encodage latin 1. J'aimerais faire en C l'une des deux choses sui Programme de conversion d'un caractère arabe en UNICODE. [ par ba7bouhhh ] Bonjour tout le monde, Je cherche a développer un petit programme C qui me permet de retourner le UNICODE d'un caractère arabe passé comme paramètre. 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,577 sec (4)

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