Как печатать символ Unicode в C ++?

Я пытаюсь напечатать русский символ «ф» ( U + 0444 CYRILLIC SMALL LETTER EF), которому присваивается код десятичного кода 1092 . Используя C ++, как я могу распечатать этот символ? Я бы подумал, что что-то вроде следующего будет работать, но …

int main (){ wchar_t f = '1060'; cout << f << endl; } 

    Для представления символа вы можете использовать универсальные имена символов (UCN). Символ «ф» имеет значение Unicode U + 0444, поэтому на C ++ вы можете записать его «\ u0444» или «\ U00000444». Также, если кодировка исходного кода поддерживает этот символ, вы можете просто записать его буквально в исходном коде.

     // both of these assume that the character can be represented with // a single char in the execution encoding char b = '\u0444'; char a = 'ф'; // this line additionally assumes that the source character encoding supports this character 

    Печать таких символов зависит от того, на что вы печатаете. Если вы печатаете на эмулятор терминала Unix, эмулятор терминала использует кодировку, поддерживающую этот символ, и эта кодировка соответствует кодировке исполнения компилятора, тогда вы можете сделать следующее:

     #include  int main() { std::cout << "Hello, ф or \u0444!\n"; } 

    Эта программа не требует, чтобы «ф» можно было представить в одном символе. В OS X и большинстве современных Linux-установок это будет работать нормально, потому что кодирование источника, исполнения и консоли будет UTF-8 (который поддерживает все символы Unicode).

    С Windows все сложнее, и есть разные возможности с различными компромиссами.

    Наверное, самое лучшее, если вам не нужен переносимый код (вы будете использовать wchar_t, чего действительно следует избегать на каждой другой платформе), заключается в том, чтобы установить режим дескриптора выходного файла, чтобы принимать только данные UTF-16.

     #include  #include  #include  int main() { _setmode(_fileno(stdout), _O_U16TEXT); std::wcout << L"Hello, \u0444!\n"; } 

    Портативный код сложнее.

    В конечном счете, это полностью зависит от платформы. Поддержка Unicode, к сожалению, очень бедна в стандартном C ++. Для GCC вам придется сделать его узкой строкой, поскольку они используют UTF-8, а Windows требует широкую строку, и вы должны выводить ее на wcout .

     // GCC std::cout << "ф"; // Windoze wcout << L"ф"; 

    При компиляции с -std=c++11 можно просто

      const char *s = u8"\u0444"; cout << s << endl; 

    Если вы используете Windows (обратите внимание, мы используем printf (), а не cout):

     //Save As UTF8 without signature #include  #include int main (){ SetConsoleOutputCP(65001); printf("ф\n"); } 

    Не Unicode, а рабочий – 1251 вместо UTF8:

     //Save As Windows 1251 #include  #include using namespace std; int main (){ SetConsoleOutputCP(1251); cout << "ф" << endl; } 

    '1060' – это четыре символа и не будет компилироваться под стандартом. Вы должны просто рассматривать символ как число, если ваши широкие символы соответствуют 1: 1 с Unicode (проверьте настройки языка).

     int main (){ wchar_t f = 1060; wcout << f << endl; } 

    В Linux я могу просто сделать:

     std::cout << "ф"; 

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

    Interesting Posts

    Почему memcpy () и memmove () быстрее, чем указатели?

    Что означает статус = отменен для ресурса в средствах разработчика Chrome?

    Не может быть папка Acess на внешнем жестком диске HD

    Как сделать Android-представление, которое переворачивается между видами на салфетки / fling

    Используйте два внешних жестких диска как один

    Как правильно отобразить системный раздел truecrypt?

    Самый эффективный способ добавления массивов в C #?

    Как выполнить сценарий bash по очереди?

    Не удалось запустить служебный

    Получать различные значения записей

    Методы привязки данных, такие как Eval (), XPath () и Bind (), могут использоваться только в контексте управления базой данных

    Как правильно использовать AsyncTask в Android

    Как я могу написать задание cron, которое заблокирует мой интернет с 7 вечера до 7 утра? (Так что я могу немного поспать)

    Как использовать UTF-8 в свойствах ресурсов с помощью ResourceBundle

    Как может `какой cmd`! = Cmd?

    Давайте будем гением компьютера.