Conversion string <-> wstring problème d'accent.
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 :
Citation:
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Au lieu de mettre std::locale loc("english"); par std::locale loc(""); ce qui est censé utiliser la locale par défaut.
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:
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());
} |