Bonjour,
Après avoir lu l'entrée de la FAQ pour convertir des string en wstring (et inversement) j'ai copié-collé le code mais une exception est lancée :
Au lieu de mettre std::locale loc("english"); par std::locale loc(""); ce qui est censé utiliser la locale par défaut.terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Malheureusement la conversion string <−> wstring rencontre quelques problèmes avec les accents.
Quand je fait string -> wstring les caractères accentués ne sont pas présents et quand je passe de wstring -> string, les caractères accentués sont remplacé par des '?'.
Voici mon code actuel :
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 std::string IRCClient::narrow(const std::wstring& ws) { std::vector<char> buffer(ws.size()); std::locale loc(""); 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 IRCClient::widen(const std::string& s) { std::vector<wchar_t> buffer(s.size()); std::locale loc(""); std::use_facet< std::ctype<wchar_t> >(loc).widen(s.data(), s.data() + s.size(), &buffer[0]); return std::wstring(&buffer[0], buffer.size()); }
Partager