2010-01-23 15 views
5

Come si stampa these UTF-8 characters in C++?Come stampo i caratteri UTF-8 C++?

+1

dipende da quale tipo di carattere utilizzato, che si tratti di UNIX o di Windows, se si sta scrivendo una console o un api GUI. –

+0

preferibilmente console multipiattaforma – y2k

+0

Questi caratteri non fanno parte del set di caratteri ASCII, il che significa che è necessario selezionare un font che li contiene prima di poterli stampare. Non esiste un modo multipiattaforma per selezionare i caratteri per le app della console. Non penso che tu possa farlo affatto su Windows. –

risposta

0

Bene, sai che è possibile perché il tuo browser potrebbe renderli. Su Windows è possibile utilizzare l'applet charmap.exe di scoprire i loro punti di codice Unicode:

  • ♠ = 0x2660
  • ♣ = 0x2663
  • ♥ = 0x2665
  • ♦ = 0x2666

La sfida è ottenere un programma C/C++ per visualizzarli. Ciò non sarà possibile in nessun tipo di modalità non specifica della piattaforma, a meno che non si utilizzi una libreria dell'interfaccia utente multipiattaforma come Qt o wxWidgets. In un programma GUI di Windows si può fare in questo modo nel gestore di messaggi WM_PAINT:

case WM_PAINT: { 
     hdc = BeginPaint(hWnd, &ps); 
     HFONT hFont = CreateFont(16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Arial Unicode MS"); 
     HGDIOBJ oldFont = SelectObject(hdc, hFont); 
     RECT rc = {0, 0, 666, 16}; 
     DrawTextEx(hdc, L"\x2660\x2663\x2665\x2666", -1, &rc, DT_LEFT, 0); 
     SelectObject(hdc, oldFont); 
     DeleteObject(hFont); 
     EndPaint(hWnd, &ps); 
    } 
    break; 
3

Invia semplicemente i byte appropriati al tuo terminale e assicurati che il terminale utilizzi la codifica UTF-8 per visualizzare i tuoi dati. Lo stesso C++ è relativamente agnostico rispetto a UTF8. È solo una serie di uint_8.

(A meno che non si desidera utilizzare una sorta di operazioni di carattere orientato sulle stringhe con UTF-8. Quindi è necessario utilizzare le funzioni UTF-8 manipolazione, invece di indici di matrice e le normali routine di manipolazione delle stringhe.)

es sprintf("%c%c%c\n", 0xE2, 0x99, 0xA0);

0

In C++: std :: wcout < < L "WSTR [" < < WSTR < < L ']' < < std :: endl;

In C: printf ("% ls \ n \ n", wstr);

+3

wchar_t non è garantito per essere UTF-16. Non sarà certamente UTF-8. – jamesdlin

Problemi correlati