2010-01-16 8 views
2

J'essaie de convertir une chaîne C++ en chaîne wstring. J'ai trouvé le code suivant, qui semble traiter des accents, c'est ce que je recherche.Conversion de chaînes en wstring sous OS X

std::wstring widen(const std::string& s) 
{ 
    std::vector<wchar_t> buffer(s.size()); 
    std::locale loc("fr_FR"); 
    std::use_facet< std::ctype<wchar_t> >(loc).widen(s.data(), s.data() + s.size(), &buffer[0]); 

    return std::wstring(&buffer[0], buffer.size()); 
} 

Source

Malheureusement, les accidents de code pour toute autre valeur loc que C ou POSIX. Ce problème a déjà été discuté, sans succès, ici: std::locale breakage on MacOS 10.6 with LANG=en_US.UTF-8, here ou here.

Y a-t-il une solution de contournement ou un autre moyen de le faire?

+0

Pouvez-vous corriger le titre? Il se lit comme si vous voulez convertir wstring -> string. La description de votre problème est cependant string -> wstring. – rnicholson

+0

Désolé. C'est réparé. – Klaus

Répondre

1

Le plus simple serait

std::wstring w(s.begin(), s.end()); 

... mais pour conserver les accents que vous auriez besoin codecvt cependant, ce example pourrait être utile.

+0

Comme l'exemple utilise 'std :: locale loc (std :: cout.getloc(), nouveau ex_codecvt);' ne va-t-il pas juste de la même façon? – Klaus