2010-01-23 82 views
5

如何在C++中打印these UTF-8 characters如何打印UTF-8字符C++?

+1

取决于你用什么字体,无论是UNIX或Windows,无论你是写一个控制台或GUI API。 – 2010-01-23 05:29:34

+0

最好是跨平台控制台 – y2k 2010-01-23 06:11:48

+0

这些字符不是ASCII字符集的一部分,这意味着在打印它们之前必须选择一个包含它们的字体。没有跨平台的方式来选择控制台应用程序的字体。我认为你完全可以在Windows上做到这一点。 – 2010-01-23 08:34:28

回答

0

那么,你知道这是可能的,因为你的浏览器可以呈现它们。在Windows中可以使用CHARMAP.EXE小程序来发现它们的Unicode代码点:

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

面临的挑战是让C/C++程序显示它们。除非您使用像Qt或wxWidgets这样的跨平台UI库,否则这种方式不可能以任何非平台特定的方式进行。在Windows GUI程序,你可以做这样的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

只需输出适当的字节到您的终端,确保终端使用UTF-8编码来显示您的数据。 C++本身相对UTF8不可知。这只是一个uint_8的数组。

(除非你想使用某种面向字符的操作上使用UTF-8字符串。然后,你需要使用UTF-8的操控功能,而不是数组索引和普通的字符串处理例程。)

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

0

在C++: 的std :: wcout < < L “WSTR [” < < WSTR < < L ']' < <的std :: ENDL;

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

+3

wchar_t不保证是UTF-16。这当然不会是UTF-8。 – jamesdlin 2010-01-23 06:52:47