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

C++ Discussion :

Caracteres unicode sur console


Sujet :

C++

  1. #1
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut Caracteres unicode sur console
    Je m'amusais dernierement a afficher des caracteres unicode dans un petit programme c++ sous linux et il n'y avait aucun probleme.
    Par contre, lorsque j'ai essaye le meme programme sous win, j'ai eu un resultat tout a fait different.

    Exemple :
    Pour le caractere suivant ╔ le code est 2254

    Sous linux ca marche mais sous win pas du tout

    J'ai finalement decouvert sur un forum que le code pour ce caractere est 00C9, ca marche sous win mais pas sous linux!

    Quelqu'un peut-il m'aider a comprendre pourquoi?? Et surtout quelle est la solution

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Peux-tu montrer ton début de programme, les fonctions utilisées ?

    Et précise aussi ton EDI, car je sais que la version 6 des bibliothèques C avait des problèmes avec l'unicode sur la console...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    Je travaille sur Code::Blocks que ce sois sous win ou sous linux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        cout << "\u2554" << endl; 
        cout << "\x2554" << endl;   //ne marche pas sous linux (hex escape out of range)
        cout << "\u00C9" << endl; 
        cout << "\x00C9" << endl; 
    }
    Resultats sous win:
    Γòö
    T
    É


    Resultats sous linux:

    É
    ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Houlà, avec les iostream ça risque d'être encore plus compliqué, car il me semble que MinGW ne supporte pas wcout...

    Mon conseil ? #define.

    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifdef WIN32
    	#define BOX_NW  '\xC9'
    	#define BOXS_NW "\xC9"
    #else
    	#define BOX_NW  '\u2554'
    	#define BOXS_NW "\u2554"
    #endif
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    J'y avais pense et tu me confirme que c'est apparemement la solution.

    Mais j'aurais bien aime comprendre l'equivalence 2554->C9

    J'avais trouve ce code http://msdn2.microsoft.com/en-us/lib...94(VS.85).aspx

    Et j'ai repere ce ptit bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void DumpString(LPWSTR pInput)
    {
        while (*pInput != 0)
        {
            if (*pInput < 0x80)
                wprintf(L"%c", *pInput);
            else
                wprintf(L"\\x%4.4x", *pInput);
            pInput++;
        }
        wprintf(L"\n");
    }
    J'ai verifie que effectivement si le code est inferieur a 0080 ca marche sous win. Mais j'arrive pas a comprendre la signification technique de ce
    Ca m'a tout l'air d'une conversion mais j'avoue que j'y comprend rien

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour DumpString, c'est simple: La fonction écrit "\xHHHH" pour chaque caractère non-ASCII (mais elle ignore le cas des caractères de contrôle).

    Pour l'équivalence 2554->C9, j'ai trois mots: Page de Codes.
    Plus précisément la page de codes 850.

    Sous Windows, le seul moyen d'écrire directement de l'unicode sur la console sans passer par une page de codes, c'est d'employer directement la fonction unicode d'écriture vers la console: WriteConsoleW(). Et comme si un seul problème ne suffisait pas, cette fonction ne marche que sur les consoles. Tu auras plus vite fait d'utiliser tes defines.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    Alors sans hesiter les #define
    Merci pour les infos et surtout la page de codes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. caractere ASCII et unicode sur une seul ligne
    Par vincent.mbg dans le forum Général Python
    Réponses: 6
    Dernier message: 16/04/2009, 12h06
  2. Réponses: 2
    Dernier message: 07/05/2007, 19h25
  3. Developpement sur console
    Par Fry dans le forum DirectX
    Réponses: 4
    Dernier message: 07/06/2005, 17h44
  4. Réponses: 2
    Dernier message: 17/05/2005, 12h26
  5. Pb caractere unicode avec forms9i..
    Par ffffffffx0 dans le forum Oracle
    Réponses: 8
    Dernier message: 28/04/2004, 13h24

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