Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1397 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [résolu ] Conversion UTF-8 => OEM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu ] Conversion UTF-8 => OEM

n°700587
GOUGOU1
Posté le 15-04-2004 à 22:27:45  profilanswer
 

Voilà, je programme avec Gtk. Or, les chaine retournées sont de types UTF-8, et moi, j'ai besoin de faire des comparaisons pour savoir si par exemple, la chaine contient un 'é', pour le transformer en 'e'.
Le problème est que lors de la compilation les caractères entré dans le programme sont codé en OEM.
Donc, je cherche une fonction qui permettrait cette conversion.
J'ai entendu parler de WideCharToMultiByte sur http://msdn.microsoft.com/library/ [...] e_2bj9.asp mais je n'arrive pas à l'utiliser correctement.
Merci et @+++


Message édité par GOUGOU1 le 16-04-2004 à 14:24:58
mood
Publicité
Posté le 15-04-2004 à 22:27:45  profilanswer
 

n°700597
Vinx
Posté le 15-04-2004 à 22:32:15  profilanswer
 

y a des fonctions dans la glibc pour faire je crois bien. Je regarde ça et je poste ;)

n°700598
Taz
bisounours-codeur
Posté le 15-04-2004 à 22:38:45  profilanswer
 

OEM ça n'existe pas. il faut que tu fasses une conversion  
 
http://developer.gnome.org/doc/API [...] #id2653955

n°700680
GOUGOU1
Posté le 16-04-2004 à 00:59:21  profilanswer
 

Je maintiens ce que je dis, OEM existe
 
http://msdn.microsoft.com/library/ [...] e_17si.asp
C'ets le codage utilisé par windob.
Sinon, les fonction que tu m'a montré je les connais déjà, mais j'arrive pas à le sutiliser, cela plente toujours.
J'abuserais peut etre en te demandant de me faire un petit exemple d'utilisation  :D ?

Code :
  1. /* renvoie l'équivalent de Src en codage OEM */
  2. char Conv_UTF8_OEM(const gchar Src)
  3. {
  4. /* chaine temporaire */
  5. char* Res;
  6. gchar Temp[1];
  7. gsize *a;
  8. /* création de la chaine temporaire */
  9. Temp[0] = Src;
  10. /* conversion en OEM */
  11. //WideCharToMultiByte(CP_ACP,0,(LPWSTR) Temp,1, Res,1,NULL,NULL);  
  12. Res = g_convert (Temp,1,"CP_OEMCP","CP_UTF8",NULL,a,NULL);
  13. return Res[0];
  14. }


Ce code compile mais plante, en fait, je sais pas quoi mettre pour les champ 3 et 4 et çà viens de là.
Pourrais tu m'expliquer quoi mettre ?
Merci, et @++

n°700729
Vinx
Posté le 16-04-2004 à 08:53:47  profilanswer
 

3 et 4 je ne sais pas non plus.
Ta variable "a" pointe sur rien par contre. C'est sans doute là que ça coince. Essaye :
gsize a;
Res = g_convert (Temp,1,"CP_OEMCP","CP_UTF8",NULL,&a,NULL);

n°700802
GOUGOU1
Posté le 16-04-2004 à 10:20:28  profilanswer
 

ah ouais !.
 

Code :
  1. /* conversion de chaine UTF-8 <=> OEM */
  2. #include <windows.h>
  3. #include <gtk/gtk.h>
  4. /* renvoie l'équivalent de Src en codage OEM */
  5. char Conv_UTF8_OEM(const gchar Src)
  6. {
  7. /* chaine temporaire */
  8. char* Res;
  9. gchar Temp[1];
  10. gsize b;
  11. gsize *a = &b;
  12. /* création de la chaine temporaire */
  13. Temp[0] = Src;
  14. /* conversion en OEM */
  15. //WideCharToMultiByte(CP_ACP,0,(LPWSTR) Temp,1, Res,1,NULL,NULL);  
  16. Res = g_convert (Temp,1,"CP_OEMCP","CP_UTF8",NULL,a,NULL);
  17. return Res[0];
  18. }


mais çà marche toujours pas, c'est vrais que mon pointeur a ne pointait nul part, mais de toute façon, çà change rien, car ce paramètre peut etre NULL, donc voilà.
Ce sont ces [:aless] de paramètres 3 et 4 qui doivent foirer à mon avis.
Est-ce que quelqu'un sait comment faire ?
merci, @++

n°700838
Vinx
Posté le 16-04-2004 à 10:47:47  profilanswer
 

Tu les as trouvés où tes paramètres 3 & 4 ?
J'ai trouvé des exemples où les paramètres sont :
"UTF-8", "ISO-8859-1", "CP1251", "UCS-2BE"...
Essaye de remplacer ton CP_UTF8 par UTF-8 et ton CP_OEMCP par un autre pour voir ;)


Message édité par Vinx le 16-04-2004 à 10:48:10
n°700933
GOUGOU1
Posté le 16-04-2004 à 12:35:03  profilanswer
 

mes paramères 3  et 4, je les ais trouvé pour une autre fonction, mais j'ai fait la recherche de mon coté, et je remplace "CP_UTF8" par "UTF-8" et la, je cherche pour l'autre paramètre.
C'est bien "ISO-8859-1"; mais le dernier chiffre change selon le pays, et je cherche ddonc une table qui me l'indique.
@++

n°700941
GOUGOU1
Posté le 16-04-2004 à 12:37:36  profilanswer
 

Citation :

ISO 8859-1 Langues ouest-européennes (Latin-1)
ISO 8859-2 Langues est-européennes   (Latin-2)
ISO 8859-3 Sud-Est européens et diverses langues (Latin-3)
ISO 8859-4 Scandinavie/baltique (Latin-4)
ISO 8859-5 Latin/cyrillique
ISO 8859-6 Latin/arabe
ISO 8859-7 Latin/grec
ISO 8859-8 Latin/hébreu
ISO 8859-9 Latin-1 modifié pour le turc  (Latin-5)
ISO 8859-10 Langages lappon/nordique/eskimo (Latin-6)
ISO 8859-11 Thaï
ISO 8859-13 Langues baltiques (Latin-7)
ISO 8859-14 Celtique (Latin-8)
ISO 8859-15 Langues ouest-européennes (Latin-9)


 
http://docs.mandragor.org/files/Op [...] o_8859-1.7
 
j'espère que çà va résoudre mon problème
@++

n°701008
Taz
bisounours-codeur
Posté le 16-04-2004 à 13:31:14  profilanswer
 

   gsize b;
     gsize *a = &b;  
 
 
pas mal inutile ça

mood
Publicité
Posté le 16-04-2004 à 13:31:14  profilanswer
 

n°701052
GOUGOU1
Posté le 16-04-2004 à 14:03:34  profilanswer
 

oué, mais dire que c'ets intuitl, çà fait pas avancer le smilblick  :lol:  
Je sais que j'aurais pu faire  
 

Code :
  1. gsize a;
  2. ....&a);


 
@++

n°701192
Vinx
Posté le 16-04-2004 à 15:59:12  profilanswer
 

Résolu ? T'as fait quoi finalement ?
C'est toujours intéressant de savoir :)

n°701424
GOUGOU1
Posté le 16-04-2004 à 20:15:04  profilanswer
 

ah oui, excuse, je me sauvais comme un voleur  :lol:  
 
/* conversion de chaine UTF-8 <=> OEM */
#include <gtk/gtk.h>
#include <string.h>
 

Code :
  1. /* renvoie l'équivalent de Src en codage OEM */
  2. void Conv_UTF8_OEM(const char* Src, char *Res)
  3. {
  4. /* chaine temporaire */
  5. char *Temp; /* pointeur sur résultat */
  6. /* conversion en OEM */
  7. Temp = g_convert(Src,strlen(Src),"iso8859-1","utf-8",NULL,NULL,NULL);
  8. /* recopie du résultat */
  9. strcpy(Res,Temp);
  10. }


 
et surtout, j'ai fais çà :

Code :
  1. Conv_UTF8_OEM(gtk_entry_get_text(List_Objets->pGet_Nom),Nom);


c'est ce qui cahnge tout le problème.
En fait, au début, je copiais d'abord le contenu de mon entry dans une chaine de caractères, puis de convertissais cette chaine. J'avais bien pris soin de declarer cette chaine comme une gchar*, mais non, çà voulais pas marcher, alors j'ai lancé le debbugeur de VC++ une bonne vingtaine de fois pour voir ce qui se passait, bin la conversion marchait, mais le PB, c'est que cette [:aless]  de gchar ne semble pas etre reelement codé en Utf-8. Donc une partie du probème venait de là.
Mais sinon, il ne faut surtout pas renvoyer un pointeur sur une chaine, car cette dernière est détruite, c'et spour çà que j'ai creer une fonction de ce type.
donc les gchar  [:alfinfrance] [:alkap]   :lol:  
bon, maintenant, je trafique mon code avec un paquet de #if defined LINUX ....
pour faire en sorte que mon code soit portable.
J'espère qu'il le sera, mais je sens déjà une grosse couille arriver au niveau du codage des caractères. Sous windows, c'est iso8859-1 mais sous linux, j'en ais pas la moindre idée, et ç àva être sportif à trouver  :lol:  
@++++


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [résolu ] Conversion UTF-8 => OEM

 

Sujets relatifs
[C++] conversion double en int ?[résolu] PHP + XML en écriture : gestion accès multiples ?
[Résolu][VB6] Comment customiser le curseur de souris?[résolu] gestion d'erreurs
conversion d'un *char en flottant dans un tableau[résolu] changer de répertoire dans une dirlistbox
[résolu tout seul] Problème avec Gtk => ** (Test Gtk.exe:1144):[servlets]sessions avec j2se1.3.1[resolu]
Numéro de ligne [Résolu]Une servlet qui met à jour un formulaire [résolu]
Plus de sujets relatifs à : [résolu ] Conversion UTF-8 => OEM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR