2010-01-23 30 views
5

¿Cómo imprimo these UTF-8 characters en C++?Cómo imprimo caracteres UTF-8 C++?

+1

depende de qué fuente se utiliza, ya sea UNIX o Windows, si usted está escribiendo una consola o una API de interfaz gráfica de usuario. –

+0

preferiblemente consola multiplataforma – y2k

+0

Estos caracteres no son parte del conjunto de caracteres ASCII, lo que significa que debe seleccionar una fuente que los contenga antes de poder imprimirlos. No hay una forma de plataforma cruzada para seleccionar fuentes para aplicaciones de consola. No creo que puedas hacerlo en Windows. –

Respuesta

0

Bueno, usted sabe que es posible porque su navegador podría representarlos. En Windows, puede utilizar el applet charmap.exe para descubrir sus puntos de código Unicode:

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

El desafío es obtener un programa C/C++ para mostrarlos. Eso no será posible en ningún tipo de forma específica que no sea de plataforma a menos que use una biblioteca de UI multiplataforma como Qt o wxWidgets. En un programa de interfaz gráfica de usuario de Windows puede hacerlo de esta manera en el controlador de mensajes 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

Simplemente envíe los bytes apropiados a su terminal, y asegúrese de que el terminal esté usando una codificación UTF-8 para mostrar sus datos. C++ en sí mismo es relativamente UTF8-agnóstico. Es solo una variedad de uint_8's.

(A menos que desee utilizar algún tipo de operaciones orientados a caracteres en las cadenas con UTF-8. Luego hay que utilizar las funciones de UTF-8 de manipulación, en lugar de los índices de matriz y las normales rutinas de manipulación de cadenas.)

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

0

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

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

+3

wchar_t no garantiza que sea UTF-16. Ciertamente no será UTF-8. – jamesdlin

Cuestiones relacionadas