2010-01-23 83 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