Non puoi cambiare caratteri da unicode ad ansi con un cast, ma serve una conversione.
Dato che di C++ ne sai poco ti do il codice per la conversione.
Tra gli include va messo:
#include <windows.h>
Sistema tu l'identazione se serve.
Da wstring a string:
codice:
// cp: Codepage di Windows.
// ws: wstring da convertire
// s: string convertita
inline void Encode(UINT cp, const std::wstring& ws, std::string& s) {
int sz = ::WideCharToMultiByte(cp,0,ws.c_str(),ws.size(),0,0,0,0);
s.resize(sz);
WideCharToMultiByte(cp,0,ws.c_str(),ws.size(),&s[0],s.size(),0,0);
}
da string a wstring:
codice:
// cp: Codepage di Windows.
// s: string da convertire
// ws: wstring convertita
inline void Decode(UINT cp,const std::string& s, std::string& ws) {
int len = MultiByteToWideChar(
cp,
MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,
s.c_str(),
s.size(),0,0
);
ws.resize(len);
MultiByteToWideChar(
cp,
MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,
s.c_str(),s.size(),&ws[0],ws.size()
);
}
I codici da usare per cp sono qui:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
I più usati sono:
CP_ACP
CP_UTF8
CP_OEM
Esempio:
codice:
wstring a = L"€€€€";
string b;
Encode(CP_UTF8,a,b);
Fa un po' di esperimenti con i codepage (anche se immagino dovrai usare CP_UTF8).