Локализация и кириллица в консоли

Последнее обновление: 05.12.2023

При использовании кириллических символов мы можем столкнуться с ситуацией, когда вместо кириллических символов отображаются непонятные знаки. Особенно это актуально для ОС Windows. И в этом случае необходимо явным образом задать текущую локаль (культуру) для вывода символов. В Си это делается с помощью функции setlocale(), определение которой имеется в заголовочном файле locale.h.

Итак, изменим код, который использовался в прошлых темах следующим образом:

#include <stdio.h>

int main(void)
{
	printf("Привет мир! \n");
	return 0;
}

Компиляция и запуск в ОС Windows может выглядеть следующим образом:

c:\C>gcc hello.c -o hello & hello
╧ЁштхЄ ьшЁ!

c:\C>

Вместо русских слов я получаю непонятные символы, и это не то, что ожидалось. Теперь изменим код, применив функцию setlocale:

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

int main(void)
{
	char *locale = setlocale(LC_ALL, "");
	
	printf("Привет мир! \n");
	return 0;
}

Поскольку функция setlocale определена в файле locale.h, то он подключается с помощью директивы #include <locale.h>.

Повторно компилируем и запустим приложение:

c:\C>gcc hello.c -o hello & hello
Привет мир!

c:\C>

Стоит отметить, что в качестве кодировки текстового файла в этом случае должна использоваться кодировка ANSI или Windows-1251, но не UTF-8.

На некоторых платформах, например, Ubuntu/MacOS, мы можем не столкнуться с подобной проблемой. И в этом случае вызов функции setlocale просто не окажет никакого влияния.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850