Вывод международных строк UTF-32 на консоль в Linux - PullRequest
0 голосов
/ 23 декабря 2011
#include <stdio.h>
#include <iostream>
#include <locale>

int main()
{
    const wchar_t *str = L"\u041F\u043E\u0440\u044F\u0434\u043E\u043A";
    std::locale::global(std::locale(""));
    std::wcout << str << std::endl;
}

Вот фрагмент кода, который выводит русскую фразу в строке wchar_t UTF-32 в виде:

  • Правильный: Порядок при запуске из терминала гномов UTF-8 в Ubuntu 11.10
  • Загрузка в Eclipse в тестовом прогоне, как указано выше
  • 45 = B8D8: 0B> @ в Eclipse в реальной программе (где я даже не знаю, кто что делает и где, но я предполагаю, что кто-то связывается с локалями)
  • ??????? если я не назову язык
  • str отображается как детали: 0x400960 L "\ 320 \ 237 \ 320 \ 276 \ 321 \ 200 \ 321 \ 217 \ 320 \ 264 \ 320 \ 276 \ 320 \ 272" в окне просмотра Eclipse
  • отображается только как ASCII байтовые символы в окне памяти Eclipse (и нет способа указать, что это строка UTF-32)

Я считаю, что это неверная конфигурация либо в консоли затмения, либо в программе, потому что, например, другие люди, которые просто запускают мой код в Eclipse, делают см. правильный вывод .

Может ли кто-нибудь пролить свет на эту путаницу? Как правильно настроить все компоненты (ОС, gcc, терминал, Eclipse, источники ...) для вывода международных символов, которые хранятся в строках wchar_t UTF-32?

И в качестве примечания, почему я все еще должен заботиться обо всем этом, когда у нас есть UTF-32, и этого должно быть достаточно, чтобы знать, что внутри ...

1 Ответ

0 голосов
/ 09 ноября 2012

Оказалось, что другой код изменил язык.

...