PDA

Visualizza la versione completa : [C++]Caratteri accentati...


s1m0k96
04-02-2010, 16:43
Ciao a tutti sono nuovamente io...
Volevo chiedervi come č possibile visualizzare i caratteri accentati in un programma in c++ dato che quando le scrivo vengono fuori dei caratteri strani...
grazie a tutti.

shodan
04-02-2010, 18:11
Normale. (Inizia a diventare una FAQ questa cosa).
La console usa un set di caratteri OEM, quindi tutti i caratteri oltre il 127 sono sballati.
Ti rimando alla documentazione delle funzioni per approfondimenti.



inline std::string translate_chars(const std::string& s) {
int sz = ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,s.c_str(),s.size(),0,0);
std::wstring ws(sz,'');
::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,s.c_str(),s.size(),&ws[0],ws.size());

int sz = ::WideCharToMultiByte(CP_OEMCP,0,ws.c_str(),ws.siz e(),0,0,0,0);
std::string os(sz,'');
::WideCharToMultiByte(CP_OEMCP,0,ws.c_str(),ws.siz e(),&os[0],os.size(),0,0);
return os;
}

MItaly
04-02-2010, 19:07
... per quanto io creda che con un po' di magia C++ probabilmente si potrebbe costringere cin e cout ad effettuare le trasformazioni OEM->ANSI e viceversa; credo che la questione coinvolga codecvt, locale e facet, ma devo documentarmi.

shodan
04-02-2010, 21:43
Basterebbe disporre della tabella di lookup dell'OEM relativo alla lingua. Essendo una conversione 1:1 non dovrebbe essere difficile scrivere un codecvt per la trasliterazione.

MItaly
04-02-2010, 22:15
Basterebbe appunto usare MultiByteToWideChar/WideCharToMultiByte (per quanto sarebbe una soluzione piuttosto inefficiente); come detto, perņ, sui locales so poco-niente, per cui dovrei prima documentarmi su come funzionano.

xnavigator
05-02-2010, 11:13
cioe'
perche'

(con apici)

e passa la paura :fagiano:

MItaly
05-02-2010, 11:17
Vent'anni di Unicode e ancora dobbiamo usare gli apici per gli accenti... :incupito:

Loading