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 :

Passer en unicode windows


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Passer en unicode windows
    Bonjour,
    Je souhaite passer en unicode (pour afficher (console ou GUI),stocker,écrire tous les caractères) j'utilise GNU GCC Compiler sous Code::Blocks.


    Comment passer mes fichiers en utf-8 manuellement ? (moi j'utilise notepad++ pour le faire d'habitude)
    wchar_t (WCHAR) est-il le type pour utiliser l'unicode ?
    Pourquoi sa taille ne fait que 2 octets, sa sera suffisant ? (je ne crois pas)
    Quel différence avec UTF-16... ?

    Merci.
    Dernière modification par Invité ; 19/01/2014 à 17h15.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Le type char ou wchar_t représente juste un espace de stockage, pas un encodage de caractères. char est généralement adapté pour stocker plein d'encodages différents (ASCII, JIS, Windows-1252...). wchar_t est généralement bien adapté pour stocker de l'UCS2 ou de l'UTF-16 sous windows, et de l'UTF32 sous unix.

    Ce qui compte pour dire que tu utilises tel ou tel encodage est plutôt l'API avec laquelle tu causes au système, tu écris tes fichiers... Sous windows, l'API existe en deux versions, l'une codée en char, dont l'encoding varie en fonction de la configuration de la machine, et l'autre en wchar_t, dont l'encoding est UTF-16. La première version a des noms de fonctions se terminant par A, la seconde par W. Et il y a tout un jeu de marcos ignobles pour basculer un code source de l'un à l'autre à l'aide d'un simple define.

    Cette stabilité fait que je recommande plutôt d'utiliser cette seconde version. Mais ça, c'est pour l'API windows. Maintenant, il y a aussi la question de comment toi tu vas stocker les chaînes de caractère en interne. En règle générale, et d'autant plus si tu veux faire du code portable, UTF-8 stocké dans des char (et des std::string) est une bonne solution. Tu ne fais donc la conversion UTF-8 <-> UTF-16 qu'aux limites de ton programme, quand tu appelles une API système.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Donc dans la pratique j'utilise les fonctions de l'api windows en W , je met des L partout devant mes strings et puis... ?
    Par contre si je demande ça c'est que je veut avoir en mémoire des caractère chinois , arabe donc si je stocke ça dans des char il vas pas avoir un petit problème ?
    Ce que je voudrais c'est qu'on me disent utilise ça comme type de variable,ça comme fonctions,ça,ça , fait si , fait sa et puis que je n'ai plus a m'en souciez

    std:wstring ça a l'air d'être ce que je veut mais en essayant de d'afficher une variable j'ai rien du tout...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        std::wstring name = L"法国";
        std::wcout << name << endl;
    (le forum modifie les caractères chinois)
    Dernière modification par Invité ; 19/01/2014 à 21h45.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Alors sous Windows, tu es censé utiliser la version avec macros à la place, genre au lieu de puts("abc") ou putws(L"abc"), utiliser _putts(_T("abc")).

    Ton principal problème, c'est que de telles macros ou typedefs ne sont pas fournies pour la bibliothèque standard C++, tu te retrouves obligé de les définir toi-même (de préférence dans un fichier d'en-tête dédié)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    namespace std
    {
    	typedef basic_string< _TCHAR > _tstring;
    }
     
    #ifdef _UNICODE
    #define _tcout wcout
    #else
    #define _tcout cout
    #endif
    Le second problème, c'est que même en wchar_t, une console Windows avec ses réglages par défaut aura des problèmes pour afficher les caractères non-IBM-850. Je crois que ça peut être plus ou moins contourné en changeant les réglages de police de la console, plus une modif dans le code...

Discussions similaires

  1. Passer de Vista à Windows 7 via MSDNAA
    Par ChristopheD dans le forum Windows 7
    Réponses: 9
    Dernier message: 17/08/2009, 11h19
  2. Réponses: 2
    Dernier message: 08/08/2007, 11h45
  3. Réponses: 7
    Dernier message: 12/10/2005, 15h21
  4. passer window xp anglais vers francais
    Par WEBANNONCE dans le forum Windows XP
    Réponses: 2
    Dernier message: 23/09/2005, 15h26
  5. Little Script UNIX ==> A Passer sous Windows
    Par argoet dans le forum Windows
    Réponses: 5
    Dernier message: 15/11/2004, 16h36

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