Вы используете полную противоположность Unicode. Консоль работает с 8-битной кодовой страницей, по умолчанию на западных машинах - code page 437. Что соответствует набору символов старого символьного ПЗУ IBM PC и представляет собой кодовую страницу, ожидаемую большинством предыдущих программ DOS. Первый набор кодов символов, коды от 0 до 8 выглядеть следующим образом:
Примечание смайлик для кода 0x02, то тот, который вы видели на консоли. Вы можете увидеть остальные глифы в этом Wikipedia article. Отвратительная проблема с 8-битными кодировками символов заключается в том, что их так много. Блокнот читает ваш файл с помощью другой кодовой страницы. По умолчанию это Windows-1252 на машинах в Западной Европе и Америке. На этой странице нет глифов для кодов управления, поэтому вы не видите смайлик в «Блокноте».
Работа с кодовыми страницами является главной головной болью. Вот почему Unicode был изобретен.
Возможно подключение консоли к кодовой странице Юникода. Однако он должен быть 8-битной кодировкой, еще одним унаследованным от консольных программ, поддерживающих перенаправление вывода. Что делает правильный выбор utf-8. Вы можете переключиться с самой консоли, набрав chcp 65001
перед началом вашей программы. Или вы можете сделать это в своем коде, позвоните SetConsoleOutputCP(CP_UTF8);
.
Еще одна неудачная деталь, о которой вы должны заботиться, вам также необходимо изменить шрифт, используемый для консоли. По умолчанию используется шрифт TERMINAL, устаревший шрифт, предназначенный для отображения глифов IBM PC, но не знает о компонентах Unicode. Используйте системное меню для переключения (нажмите Alt + Space, Properties), не так много, чтобы выбрать, но Consolas или Lucinda Console подходят.
Теперь вы можете отображать Unicode, это совсем другая история, которую представил Реми.
Вам нужно различать методы ввода и символы, а также между Unicode и различными кодировками символов (Unicode не является кодировкой). См. [Абсолютный минимум, каждый разработчик программного обеспечения, абсолютно, должен знать об Unicode и наборах символов (никаких оправданий!)] (Http://www.joelonsoftware.com/articles/Unicode.html) для праймера. – delnan
Какую программу вы открываете? Скорее всего, вам нужно сначала добавить спецификации в файл, а затем записать фактические байты в файл, а не их символьные представления. – ryanbwork
Я открываю его с помощью блокнота. Вся программа фактически делает файл и отображает на нем смайлики. Проект является компилятором для языка сценариев, который будет скомпилирован в специальный шестнадцатеричный код, который будет читать интерпретатор. –