2009-10-06 11 views
5

J'ai problème smalll je veux convertir unicode dans l'octet multi est-il un moyenConversion Unicode Multibyte

+3

Avez-vous vérifié wcstombs? http://www.cplusplus.com/reference/clibrary/cstdlib/wcstombs/ – vpram86

+0

Je pense que vous aurez besoin de nous donner plus de détails. Quel format unicode avez-vous maintenant et quel encodage multi-octets voulez-vous utiliser? –

Répondre

7
std::string NarrowString(const std::wstring& str, const char* localeName = "C") 
{ 
    std::string result; 
    result.resize(str.size()); 

    std::locale loc(localeName); 

    std::use_facet<std::ctype<wchar_t> >(loc).narrow(
    str.c_str(), str.c_str() + str.size(), '?', &*result.begin()); 

    return result; 
} 

Il devrait utiliser les paramètres régionaux en cours pour convertir la chaîne unicode. Pour les caractères qui n'appartiennent pas à la page de code le '?' caracter est utilisé. Testé avec Visual C++ 2005/2008.

+0

Bon, mais comment détecter s'il a été converti avec succès ou un '?' a été utilisé pour un personnage? Conversion aller-retour ?? – Narek

3

wcstombs fonctionne à merveille pour moi :)

1

Dans la plupart des cas WideCharToMultiByte() sera suffisant.