Греческие буквы в Windows Concole - PullRequest
5 голосов
/ 29 мая 2011

Я пишу программу на C и хочу, чтобы в меню были греческие символы, когда я запускаю ее в cmd.exe.Кто-то сказал, что для включения греческих символов вы должны использовать printf, который выглядит примерно так:

 printf(charset:IS0-1089:uffe);      

, но они не были уверены.

Кто-нибудь знает, каксделать это?

Ответы [ 4 ]

4 голосов
/ 29 мая 2011

Предполагая Windows, вы можете:

Этот код печатает γειά σου:

#include "windows.h"

int main() {
  SetConsoleOutputCP(1253); //"ANSI" Greek
  printf("\xE3\xE5\xE9\xDC \xF3\xEF\xF5");
  return 0;
}

Шестнадцатеричные коды представляют γειά σου при кодировании как windows-1253 . Если вы используете редактор, который сохраняет данные как windows-1253, вы можете использовать литералы вместо этого. Альтернативой может быть использование либо OEM 737 (это действительно кодировка DOS), либо использование Unicode.

Я использовал SetConsoleOutputCP для установки кодовой страницы консоли, но вы могли бы ввести команду chcp 1253 до запуска программы.

0 голосов
/ 28 мая 2017

Один из способов сделать это - распечатать широкую строку.К сожалению, для этой работы Windows требуется немного нестандартной настройки.Этот код выполняет эту настройку внутри #if блоков.

#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>

/* This has been reported not to autodetect correctly on tdm-gcc. */
#ifndef MS_STDLIB_BUGS // Allow overriding the autodetection.
#  if ( _WIN32 || _WIN64 )
#    define MS_STDLIB_BUGS 1
#  else
#    define MS_STDLIB_BUGS 0
#  endif
#endif

#if MS_STDLIB_BUGS
#  include <io.h>
#  include <fcntl.h>
#endif

void init_locale(void)
// Does magic so that wprintf() can work.
{
  // Constant for fwide().
  static const int wide_oriented = 1;

#if MS_STDLIB_BUGS
  // Windows needs a little non-standard magic.
  static const char locale_name[] = ".1200";
  _setmode( _fileno(stdout), _O_WTEXT );
#else
  // The correct locale name may vary by OS, e.g., "en_US.utf8".
  static const char locale_name[] = "";
#endif

  setlocale( LC_ALL, locale_name );
  fwide( stdout, wide_oriented );
}

int main(void)
{
  init_locale();
  wprintf(L"μουσάων Ἑλικωνιάδων ἀρχώμεθ᾽\n");
  return EXIT_SUCCESS;
}

. Этот код необходимо сохранить как UTF-8 с спецификацией, чтобы более старые версии Visual Studio могли правильно его прочитать.На вашей консоли также должен быть установлен моноширинный шрифт Unicode, такой как Lucida Console, чтобы он отображался правильно.Чтобы смешивать широкие строки со строками ASCII, стандарт определяет спецификаторы формата %ls и %lc равными printf(), хотя я обнаружил, что они не работают везде.

Альтернативой является установкаконсоль в режиме UTF-8 (в Windows сделайте это с chcp 65001.), а затем напечатайте строку UTF-8 с printf(u8"μουσάων Ἑλικωνιάδων ἀρχώμεθ᾽\n");.UTF-8 является второсортным гражданином на Windows, но это обычно работает.Попробуйте запустить его без предварительной настройки кодовой страницы, и вы получите мусор.

0 голосов
/ 29 мая 2011

Вы можете напечатать символы символов Юникода, используя printf, например:

printf("\u0220\n");

это напечатает Ƞ

0 голосов
/ 29 мая 2011

Я думаю, это может работать, только если ваша консоль поддерживает греческий язык. Вероятно, вы хотите отобразить символы на греческий, но используя ASCII. Для C #, но та же идея в C.

913–936 = заглавные греческие буквы

945 - 968 = строчные греческие буквы

Подробнее на Suite101: Работа с греческим алфавитом и C #: как правильно отображать коды ASCII при создании приложения C # | Suite101.com по этой ссылке .

...