CHARSET CONVERTER LIBRARY

Signaler
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36876-charset-converter-library

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
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
plutot que tous tes define, un petit énum et le tour est joué
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

//
// 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>
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

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.
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

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[, ...] );
Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

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 ... » ...
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

C'est une nouveauté de la norme C99: "Variable Length Arrays".
Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008

En effet c'est étrange... normalement la taille d'n tableau doit être statique lors de la compilation :s
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Je suis sous dev-cpp donc gcc
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
char caEAscii[iStrLen];
Quel compilo accepte cela ???