#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, и этого должно быть достаточно, чтобы знать, что внутри ...