Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3

    [c++] Stampa lettere accentate con cout del Visual C++ 2008

    Ciao,

    scusate ma sto imparando ora ad utilizzzare Visual C++ 2008 Express Edition.
    facendo una qualsiasi stampa, con cout, di stringhe che contengono caratteri accentati ottengo dei simboli strani a console.
    Nelle properties del progetto ho visto che è settata la codifica unicode; non so che altro guardare.
    Consigli?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Normale. La console utilizza il codepage OEM corrente per l'output e tutti i caratteri > 127 sono diversi da quelli che ci si aspetta.
    I settaggi UNICODE dell'ambiente non centrano col tuo problema.
    Se per te non è un problema puoi sostituire l'accento con l'apostrofo, altrimenti devi convertire la stringa da ANSI a UNICODE e da UNICODE a OEM.

    Se intendi percorrere questa strada, le API sono:

    MultiByteToWideChar con flag CP_ACP per convertire ANSI -> UNICODE
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    WideCharToMultiByte con flag CP_OEM per convertire UNICODE -> OEM
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    In alternativa puoi utilizzare gli stream Unicode wcin e wcout al posto dei soliti cin e cout.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    per curiosità ho provato anche io a fare
    codice:
    std::wcout << "è un esempio!" << std::endl;
    ma il risultato è identico a cout indicato da webc!
    La cosa mi interessa: c'è un modo diverso di usare le costanti stringa per questi casi?
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    wcout prende un wchar_t quindi ci vuole il L davanti la stringa.
    La cosa interessante (già provai a suo tempo) è che non funziona.



    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Se neanche oregon risponde, allora che Dio ci salvi.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3
    grazie a tutti per le risposte. Ma davvero speravo ci fosse un modo più semplice per stampare una semplice lettera accentata :master:

    Domandona: succede così per tutti i compilatori del C++?? (bhe, tutti è un po' troppo, diciamo se sapete se esistono compilatori che "semplificano la vita" o se è proprio una cosa legata allo standard che definisce il C++)

    grazie ancora!!

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non è un problema di compilatore o di linguaggio, ma di codifiche ANSI e di sistema operativo.
    Solo i caratteri da 0 a 127 sono comuni ai vari codepage, il resto varia da sistema a sistema e da paese a paese ( e tralascio la codifica EBCDIC che cambia anche i caratteri 0 - 127).

    Uno dei motivi per cui è nato UNICODE è per sopperire a queste diversità.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da webc
    grazie a tutti per le risposte. Ma davvero speravo ci fosse un modo più semplice per stampare una semplice lettera accentata
    Non sempre quello che appare semplice lo è veramente ...

    Aggiungo un paio di righe a tutti gli ottimi interventi ...

    codice:
    	TCHAR str[100];
    	CHAR oemstr[100];
    
    	DWORD lstringa = wsprintf(str, L"è un esempio");
    	CharToOemBuff(str, oemstr, lstringa);
    	WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), oemstr, lstringa, &lstringa, NULL);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Non vorrei sbagliarmi, ma forse (non ho provato e potrebbe essere una cavolata) c'entra anche il codepage in cui è salvato il sorgente...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.