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

SL & STL C++ Discussion :

char, string, wchar_t, wstring ?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut char, string, wchar_t, wstring ?
    Bonjour,
    J'aimerais travailler avec des chaînes de caractères en UTF-16 et pour ceci on m'a conseillé d'utiliser les wide string de la SL. Cependant, cela ne fonctionne pas des masses. Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <iostream>
    #include <string>
     
    using namespace std;
     
     
    int main()
    {
        string text("bonjouér");
        cout<<text<<endl;
     
        wchar_t wtext[] = { 'b' , 'o' , 'n' , 'j' , 'o' , 'u' , 'é' , 'r' , 0 }; // warning: narrowing conversion of ''\37777777751'' from 'char' to 'wchar_t' inside { } [-Wnarrowing]
        wcout<<wtext<<endl;
        return 0;
    }
    Donne :
    J'ai aussi essayé d'utiliser les char16_t et u16string, mais pas moyen de faire une sortie correcte, que ce soit avec cout ou wcout.
    Un peu d'aide svp ?

    J'utilise Code::Blocks 13.12 avec GCC 4.7.1 (supporte le C++11 mais pas le C++14) sous Windows 8.1 x64 (besoin d'autres informations ?)

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Il me semble qu'il faut faire cela, mais je ne peux pas tester

    wchar_t wtext[] = L"Bonjour私 の 身体 は ビール で 出来る の かもしらない。";

    Note le L majuscule

  3. #3
    Invité
    Invité(e)
    Par défaut
    C'est bien ce que j'avais vu ailleurs, mais...
    error: converting to execution character set: Invalid argument
    Gak. Et j'ai pas envie d'utiliser les string de la SFML, c'est du UTF-32, c'est trop gros.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Si cela fonctionne:

    Try to use compiler switch "-finput-charset=<source charset>" in build options. More information about switch -> google
    Il faut évidemment enregistrer ton code source en UTF-16

    wchar_t problem

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai essayé -finput-charset=UTF-16
    cc1plus.exe: error: failure to convert UTF-16 to UTF-8
    Process terminated with status 1 (0 minute(s), 0 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 0 second(s))

    Et avec -finput-charset=iso-8859-1 ça remplace le 'é' par un 'U' (ce qui donne "bonjouUr")

    (j'ai aussi essayé de réinstaller Code::Blocks, sans effet bien sûr...)

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Si c'est cela c'est juste énorme:

    It appears that CPP is telling libiconv to convert the source file from UTF-16 to UTF-8, which works, but as soon as it hits the include file, it fails. Of course, stdio.h is stored in UTF-8 on the system so trying to convert it from UTF-16 will fail right away.
    La seule solution que je vois c'est d"échapper tous les caractères, mais cela risque de mettre la grouille dans ton code
    "Bonjour私 の 身体 は ビール で 出来る の かもしらない。" -> "\u42\u6F\u6E\u6A\u6F\u75\u72\u79C1\u3000\u306E\u3000\u8EAB\u4F53\u3000\u306F\u3000\u30D3\u30FC\u30EB\u3000\u3067\u3000\u51FA\u6765\u308B\u3000\u306E\u3000\u304B\u3082\u3057\u3089\u306A\u3044\u3002"

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

Discussions similaires

  1. char*, string et wstring
    Par esteban dans le forum C++
    Réponses: 14
    Dernier message: 18/02/2011, 15h52
  2. string et wstring
    Par superspag dans le forum C++
    Réponses: 7
    Dernier message: 20/01/2006, 08h31
  3. char *, string et tableau statique ou dynamique
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 05/12/2005, 11h33
  4. Conversion char * vers wchar_t
    Par Zapan dans le forum C++
    Réponses: 4
    Dernier message: 24/02/2005, 15h56
  5. Réponses: 3
    Dernier message: 26/05/2004, 23h03

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