IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

WideCharToMultiByte et page de code pb


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut WideCharToMultiByte et page de code pb
    Bonjours a tous.

    Voila mon problème je dois convertir de l'UTF8 dans des vieux types d'encodage 8 bits pour des problèmes de compactibilité. Je suis bien conscient que ça va pas marcher pour tout le temps car certains points de code Unicode n'auront pas leur équivalent mais dans mon cas precis je reste un peu perplexe. Donc si quelqu'un a une idée de ce que je fais mal, ça serait vraiment génial.

    Voici l’exemple :

    J’ai des data UTF8 :

    Ex : csUTF8= rollin’
    equivalent hex : 72 6f 6c 6c 6e c2 92 (le dernier caractère est code sur 2 octets)


    Pour convertir tous ca dans mon type d’encodage en c++ je dois

    Convertir le UTF8 en WIDECHAR micro daube code sur deux octets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int iRet= MultiByteToWideChar(
    			CP_UTF8,         // code page
    			0,         // character-type options
    			csUTF8, // string to map
    			lenUTF8,       // number of bytes in string
    			wc,  // wide-character buffer
    			MAXWIDECHAR-1   // size of buffer
    			);
    if (!iRet){
    	DWORD a=GetLastError();
    	…
    	cout << “ARRRR” << endl;
    	return NULL;
    &#125;
    Donne: rollin% (%caractere qui ne s’affiche pas dans le debugger) equivalent hex : 00 72 00 6f 00 6c 00 6c 00 6e 00 92
    Ce qui semble tres bien car si reconvertis le wide char en UTF8 avec WideCharToMultiByte il retrouve le bon code. 00 92 est donc bien l’équivalent WC du caractère UTF8 C2 92. Cool

    Reste à convertir le WC dans ma page de code en l’occurrence le 1252 qui est le standard Windows pour les langues de l’Europe de l’ouest.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int lenWC = wcslen&#40;wc&#41;;
    char c&#91;MAXISOCHAR&#93;;
    memset&#40;c,0,MAXISOCHAR&#41;;
    iRet=WideCharToMultiByte&#40;
    			1252,            // code page-
    			0,            // performance and mapping flags
    			wc,    // wide-character string
    			lenWC,          // number of chars in string
    			c,     // buffer for new string
    			MAXISOCHAR-1,          // size of buffer
    			NULL,// NULL,     // default for unmappable chars
    			NULL  // set when default char used
    			&#41;;
    Et je me retrouve avec rollin? equivalent hex 72 6f 6c 6c 69 6e 2c 3f (point d’interrogation, la fonction WideCharToMultiByte n’as donc pas réussi a trouver l’équivalent)

    Hors je suis sur ou quasi sur (cf. http://www.miakinen.net/vrac/charsets/) que ce caractère existe dans la page de code 1252.

    Le seul truc que je vois est que le ISO 1252 n’est pas installé sur ma machine. Mais bien que je travail sur un Windows XP professionnelle anglais je serais surpris que cette page standard ne soit pas installe (en fait je sais pas vraiment comment vérifier d’ailleurs). Ou alors il faut que je précise quelques choses au niveau du compilateur ou un truc comme ça. Ou alors j’ai tout faux depuis le début ce qui n’est pas a impossible me connaissant

    Quelqu’un pour m’aider ou au moins m’expliquer ou je me gourre.

    Merci d’avance.

    ecuyer

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Juste quelques précisions et correctif:
    J’ai fait un copier coller un peu rapide
    le résultat final est bien
    72 6f 6c 6c 69 6e 3f est pas 72 6f 6c 6c 69 6e 2c 3f qui était un caractère que j'avais rajoute pour test et qui n'a rien a voir avec mon problème.


    Sinon pour ceux qui s'intéresse au problème de codage vous pouvez aller voir sur la page http://www.i18nguy.com/unicode/codepages.html#msftdos
    qui donne une très très bon premier aperçu.

    Enfin ça corrige pas mon problème tous ça :-P

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut


    Mauvais forum, je déplace...

Discussions similaires

  1. Page de code
    Par akli_agha dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/06/2006, 10h19
  2. Changer la page de code par défaut de l'invite de commande
    Par guipom dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 06/04/2006, 11h06
  3. [EDI] Logiciel pour mettre en page du code PHP
    Par Metallic-84s dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/03/2006, 13h16
  4. [Batch NT]Pb de page de code
    Par Laurent Dardenne dans le forum Windows
    Réponses: 7
    Dernier message: 17/08/2005, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo