Как я печатаю символы UTF-8 C ++? - PullRequest
5 голосов
/ 23 января 2010

Как мне распечатать эти символы UTF-8 в C ++?

Ответы [ 3 ]

3 голосов
/ 23 января 2010

Просто выведите соответствующие байты на ваш терминал, и убедитесь, что терминал использует кодировку UTF-8 для отображения ваших данных. Сам C ++ относительно UTF8-независимый. Это просто массив uint_8.

(Если вы не хотите использовать какие-либо символьно-ориентированные операции над строками с UTF-8. Затем вам нужно использовать функции манипуляции UTF-8 вместо индексов массива и обычных процедур обработки строк.)

например. sprintf("%c%c%c\n", 0xE2, 0x99, 0xA0);

1 голос
/ 23 января 2010

Ну, вы знаете, что это возможно, потому что ваш браузер может их визуализировать. В Windows вы можете использовать апплет charmap.exe, чтобы узнать их кодовые точки Unicode:

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

Задача состоит в том, чтобы заставить программу C / C ++ отображать их. Это не будет возможно никаким не зависящим от платформы способом, если вы не используете кросс-платформенную библиотеку пользовательского интерфейса, такую ​​как Qt или wxWidgets. В программе 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;
0 голосов
/ 23 января 2010

В C ++: std :: wcout << L "wstr [" << wstr << L ']' << std :: endl; </p>

В С: Е ( "% Ls \ п \ п", WSTR);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...