PDA

View Full Version : [c++] comando "wcout" non riconosciuto da Mingw??


uomoserio
13-06-2007, 06:52
Ciao, facevo delle prove con setlocale() e wcout per l'output di caratteri accentati in console, quando mi sono imbattuto in questo ostacolo.
Dev-cpp (ovvero Mingw) non mi compila questo listato:

#include <iostream>
#include <clocale>
#include <cwchar>

using namespace std;

int main(){
setlocale(LC_ALL, "");
wcout << L"Sono una stringa con lettere accentate: èòàùì";
cin.get();
return 0;
}

In pratica il Dev mi dice che non riconosce il comando wcout...ma com'è possibile? Non fa parte di <iostream>?? :confused:
Possibile che il Dev abbia una libreria standard incompleta?

Infatti, compilato sul Borland C++ Builder questo codice funziona perfettamente.
Non capisco....:mc:

cionci
13-06-2007, 07:45
http://www.mingw.org/MinGWiki/index.php/wide%20characters

uomoserio
13-06-2007, 09:38
http://www.mingw.org/MinGWiki/index.php/wide%20characters

Ora capisco tutto... :rolleyes: , grazie per la segnalazione Cionci. :)
Ma che tu sappia, l'uso di setlocale() e wcout (o wprintf in caso di C e non C++) sono l'unica strada possibile per poter visualizzare caratteri accentati in console? Non esistono altri metodi veloci che Dev-cpp possa gestire senza problemi? :confused: Ho cercato con Google ma non ho trovato nulla di diverso.
Lo chiedo perchè Dev-cpp mi piace come ambiente di sviluppo gratuito, e con tutti i devpack disponibili lo si può espandere parecchio....ma sono perplesso da una simile limitazione sulla STL. :mbe:

cionci
13-06-2007, 09:42
Se non sbaglio andbin aveva fatto vedere l'output di caratteri accentati anche con una sequenza di escape...

uomoserio
13-06-2007, 11:22
Se non sbaglio andbin aveva fatto vedere l'output di caratteri accentati anche con una sequenza di escape...

mmhh...interessante.
Andbin, tu riesci ad illuminarci in merito? :)

andbin
13-06-2007, 11:59
Andbin, tu riesci ad illuminarci in merito? :)Mah ... il problema sostanzialmente è che la console non supporta l'unicode. Gestisce solo caratteri 8 bit secondo uno specifico code-page impostato (in Europa si usa tipicamente il CP-850). Basta fare dal prompt mode con per sapere quale code-page è impostato.

Usando le API di Windows si può fare così:
#include <windows.h>
#include <stdio.h>

int main (void)
{
LPWSTR msg = L"Oggi è una bella giornata";
CHAR buf[80];

CharToOemW (msg, buf);

printf ("%s\n", buf);
return 0;
}

uomoserio
13-06-2007, 13:15
Capito tutto ;)

grazie ad entrambi per il prezioso aiuto.

uomoserio