简体   繁体   中英

How I print UTF-8 characters C++?

我如何在C ++中打印这些UTF-8字符

Just output the appropriate bytes to your terminal, and make sure the terminal is using a UTF-8 encoding to display your data. C++ itself is relatively UTF8-agnostic. It's just an array of uint_8's.

(Unless you want to use some sort of character-oriented operations on strings with UTF-8. Then you need to use UTF-8 manipulation functions, instead of array indexes and the normal string manipulation routines.)

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

Well, you know it is possible because your browser could render them. On Windows you can use the charmap.exe applet to discover their Unicode code points:

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

The challenge is to get a C/C++ program to display them. That's not going to be possible in any kind of non-platform specific way unless you use a cross-platform UI library like Qt or wxWidgets. In a Windows GUI program you can do it like this in the WM_PAINT message handler:

  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;

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM