Bonjour,

Je suis nouveau en c++, et j'ai un sérieux problème ! Je souhaite ouvrir un fichier de texte comprenant sur chaque ligne un mot, et certains mots ont des caractères spéciaux.

Avant de vous consulter, j'ai consulté la faq, et j'ai vu ce code permettant de passer de l'ASCII a l'Unicode, en convertissant un string en wstring

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
16
17
18
19
20
21
22
 
#include <string> 
#include <locale> 
#include <vector> 
 
std::string narrow(const std::wstring& ws) 
{ 
    std::vector<char> buffer(ws.size()); 
    std::locale loc("english"); 
    std::use_facet< std::ctype<wchar_t> >(loc).narrow(ws.data(), ws.data() + ws.size(), '?', &buffer[0]); 
 
    return std::string(&buffer[0], buffer.size()); 
} 
 
std::wstring widen(const std::string& s) 
{ 
    std::vector<wchar_t> buffer(s.size()); 
    std::locale loc("english"); 
    std::use_facet< std::ctype<wchar_t> >(loc).widen(s.data(), s.data() + s.size(), &buffer[0]); 
 
    return std::wstring(&buffer[0], buffer.size()); 
}
Mais cela ne fonctionne pas, il n'y a pas de problème de compilation, je lance le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
std::string chaine = "é";
std::wstring chaine2 = widen(chaine);
mais en sortie je reçois dans la console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Abandon (core dumped)
Voilà, je n'y connais pas grand chose, j'aimerais savoir si vous pourriez me dépanner ?

En tout cas, merci à ceux qui auront pris la peine de lire, et plus encore à ceux qui auront répondu.