Setlocale c что это значит
Устанавливает или извлекает языковой стандарт времени выполнения.
Синтаксис
Параметры
category
Категория, на которую влияет языковой стандарт.
locale
Указатель языкового стандарта.
Возвращаемое значение
задает все категории, возвращая только строку
Комментарии
_wsetlocale — это версия с расширенными символами для setlocale ; аргумент locale и возвращаемое значение _wsetlocale являются строками с расширенными символами. Поведение _wsetlocale и setlocale идентично в противном случае.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
TCHAR.H ассемблер | _UNICODE & _MBCS не определено | _MBCS определяется | _UNICODE определяется |
---|---|---|---|
_tsetlocale | setlocale | setlocale | _wsetlocale |
Аргумент category указывает части информации о языковом стандарте программы, которые подвергаются влиянию. Макросы, используемые для category и части программы, на которые они оказывают, указаны ниже.
При запуске программы выполняется эквивалент следующего оператора:
setlocale( LC_ALL, «C» );
setlocale( LC_ALL, «.OCP» );
setlocale( LC_ALL, «.ACP» );
setlocale( LC_ALL, » _ » );
Задает языковой стандарт для языка, страны или региона, а также кодовую страницу, определяемую строками, и. Можно использовать различные сочетания языка, страны или региона и кодовой страницы. Например, этот вызов устанавливает языковой стандарт «французский (Канада)» с кодовой страницей 1252.
setlocale( LC_ALL, «French_Canada.1252» );
Этот вызов устанавливает языковой стандарт «французский (Канада)» с кодовой страницей по умолчанию ANSI.
setlocale( LC_ALL, «French_Canada.ACP» );
Этот вызов устанавливает языковой стандарт «французский (Канада)» с кодовой страницей по умолчанию OEM.
setlocale( LC_ALL, «French_Canada.OCP» );
setlocale( LC_ALL, «en-US» );
setlocale( LC_ALL, «English» );
setlocale( LC_ALL, «English_United States.1252» );
Рекомендуется использовать первую форму для обеспечения производительности и простоты обслуживания.
Эта категория должна быть LC_ALL или LC_CTYPE для реализации изменения кодовой страницы. Например, если страна или регион по умолчанию и язык операционной системы узла являются » United States » и » English «, следующие два вызова setlocale функционально эквивалентны:
setlocale( LC_ALL, «.1252» );
setlocale( LC_ALL, «English_United States.1252»);
Функция _configthreadlocale используется для управления setlocale тем, влияет ли на языковой стандарт для всех потоков в программе или только на языковой стандарт вызывающего потока.
Поддержка UTF-8
Строка для указания режима UTF-8:
В следующих примерах показано, как указать строку UTF-8:
После вызова setlocale(LC_ALL, «.UTF8») можно передать «😊» в, mbtowcs и он будет правильно преобразован в wchar_t строку, в то время как ранее для этого не был доступен параметр языкового стандарта.
режим UTF-8 также включается для функций с историческим переводом char строк с помощью Windows кодовой страницы ANSI по умолчанию (ACP). Например, вызов _mkdir(«😊») при использовании кодовой страницы UTF-8 правильно создаст каталог с этим символом эмодзи в качестве имени папки, а не требует, чтобы ACP был изменен на UTF-8 перед запуском программы. Аналогичным образом, вызов _getcwd() в этой папке вернет строку в кодировке UTF-8. Для обеспечения совместимости ACP по-прежнему используется, если кодовая страница языка C не имеет значение UTF-8.
чтобы использовать эту функцию в ос до Windows 10, необходимо использовать локальное развертывание приложения или ссылку статически с помощью версии 1803 (10.0.17134.0) Windows SDK или более поздней. для Windows 10 операционных систем, предшествовавших 1803 (10.0.17134.0), поддерживается только статическая компоновка.
Требования
Дополнительные сведения о совместимости см. в разделе Compatibility.
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Как включить русский язык в Си
На начальных этапах программирования многие новички сталкиваются с такой проблемой: они в коде пишут какое-либо сообщение на русском языке для консоли (например, используя printf), но при запуске программы вместо русских слов появляются какие-то непонятные знаки. Покажем, как избавиться от этой проблемы.
Например, при запуске вот этой программы:
В консоли будет отображено следующее:
Всё дело в том, что мы не подключили русскую локализацию.
Исправить эту ошибку очень легко!
Для начала надо добавить следующую библиотеку:
Она отвечает за локализацию.
А затем нам надо просто написать в начале тела кода вот эту строку:
Функция setlocale задаёт локализацию программы. По умолчанию это только английский язык.
LC_ALL указывает программе, что локализированы будут все функции.
“Rus”, как легко догадаться говорит о том, что локализация произойдёт на русский язык.
Вот и всё! Мы включили русский язык в Си. Наша программа модернизирована и обогащена на две строки. Теперь она будет выглядеть вот так:
Поделиться в соц. сетях:
15 комментария(ев) к статье “ Как включить русский язык в Си ”
Что именно? Какая ошибка?
Можете попробовать такой код:
#include
#include
#include
int main()
<
setlocale(LC_ALL, “Rus”);
printf(“Всем привет! Как дела?”);
getch(); //В Visual Studio _getch();
return 0;
>
Этот вариант работает, но он не включает русский язык в стандартном потоке ошибок.
Вместо одних каракулей появились другие. Но никаких ошибок не выдает.
Здравствуйте, Евгений. Существует ещё один способ включения русского языка в Си. Попробуйте использовать следующий код:
#include
#include
#include
int main()
<
SetConsoleCP(1251); //установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); //установка кодовой страницы win-cp 1251 в поток вывода
printf(“Всем привет! Как дела?”);
_getch();
return 0;
>
Здравствуйте, использовала такой метод как в статье.
Все работает при выводе текста функцией printf.
Но, когда я считываю слово функцией scanf, а потом вывожу его функцией printf появляются снова непонятные символы.
Подскажите пожалуйста как это можно исправить.
Здравствуйте! Чуть выше в комментариях приводятся ещё два способа, как включить русский язык в Си. Попробуйте их, должно сработать.
У меня та же проблема, с printf всё работает, но вот если ввести при scanf, то в выводе printf будут кракозябры
Попробуйте способы, указанные в комментариях выше. Один из них точно сработает.
Спасибо за инфу! Все работает.
Всё работает! Спасибо большое!
Правильно “Ru”, а не “Rus”.
setlocale(LC_ALL, “Ru”);
у меня получилось так:
#include
#include
#include
void main()
<
setlocale(LC_ALL, “Rus”);
wprintf(L”Спасибо”);
>
Если кто-то пишет в NotePad++ или чём-то подобном, не забудьте поменять кодировку самого файла с UTF-8 на, например, Windows-1251.
Спасибо за статью.
Настройка локали
При изменении регистра русских букв может возникнуть проблема. Чтобы ее избежать, необходимо правильно настроить локаль (совокупность локальных настроек системы).
Настройка локали в языке C
В первом параметре указывается категория в виде числа от 0 до 5 или соответствующий числу макрос:
Чтобы использовать другую кодировку нужно указать ее название после точки, например, «.1251» или «Russian_Russia.1251» :
Вместо названия можно указать пустую строку. В этом случае будет использоваться локаль, настроенная в системе:
В качестве значения функция возвращает указатель на строку с названием локали, соответствующей заданной категории, или нулевой указатель в случае ошибки. Если во втором параметре передан нулевой указатель, то функция возвращает указатель на строку с названием текущей локали:
После настройки локали многие функции будут работать не так как раньше. Например, от настроек локали зависит вывод функции printf() :
Некоторые функции позволяют указать локаль в качестве параметра, например, функция _printf_l() :
Пример настройки локали и вывода текущего названия локали приведен в листинге 7.1.
Листинг 7.1. Настройка локали
Функция localeconv() позволяет получить информацию о способе форматирования вещественных чисел и денежных сумм для текущей локали. Прототип функции:
Объявление структуры lconv выглядит следующим образом:
В VC++ доступны также следующие поля структуры lconv :
Настройка локали в языке C++
Второй и третий конструкторы позволяют задать название локали. Вместо названия можно указать пустую строку. В этом случае будет использоваться локаль, настроенная в системе. Пример:
Четвертый конструктор создает копию объекта:
Пятый и шестой конструкторы в параметре cat позволяют указать следующие флаги (или их комбинацию через побитовый оператор | ):
Пример создания объекта класса locale для всех категорий:
Пример сравнения локалей:
Учебник C++ (Qt Creator и MinGW) в формате PDF
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Setlocale c что это значит
char *setlocale(int category, const char *locale);
ОПИСАНИЕ
Если locale не равно NULL, то текущая локаль программы изменяется согласно переданным аргументам. Аргументом category определяется какую часть текущей локали программы нужно изменить.
Категория | Определяет |
LC_ALL | Локаль целиком |
LC_ADDRESS | Форматирование адресов и элементов, относящихся к географии (*) |
LC_COLLATE | Сортировка строк |
LC_CTYPE | Классы символов |
LC_IDENTIFICATION | Метаданные, описывающие локаль (*) |
LC_MEASUREMENT | Настройки, относящиеся к единицам измерения (метрические или системы мер США) (*) |
LC_MESSAGES | Локализированные сообщения на родном языке |
LC_MONETARY | Форматирование значений денежных единиц |
LC_NAME | Форматирование приветствий людей (*) |
LC_NUMERIC | Форматирование неденежных числовых значений |
LC_PAPER | Настройки стандартных размеров бумаги (*) |
LC_TELEPHONE | Форматы, используемые в телефонных службах (*) |
LC_TIME | Форматирование значений дат и времени |
Категории, помеченные в таблице звёздочкой, являются расширениями GNU. Дополнительную информацию об этих категориях локали смотрите в locale(7).
Аргумент locale — это указатель на строку символов, содержащую требуемую настройку category. Эта строка может быть понятной константой «C» или «da_DK» (смотрите ниже), или неясной строкой, которую вернул другой вызов setlocale().
Если locale — пустая строка, «», то любая часть локали, которую требуется изменить, будет задана исходя из переменных окружения. Как это происходит — зависит от реализации. В glibc, во-первых (независимо от category), просматривается переменная окружения LC_ALL, затем переменная окружения с именем как у категории (смотрите таблицу выше), и в конце учитывается переменная окружения LANG. Используется первая найденная переменная окружения. Если её значение некорректно определяет локаль, то локаль не изменяется и setlocale() возвращает NULL.
Локали «C» или «POSIX» являются переносимыми локалями; они существуют во всех соответствующих системах.
Если locale равно NULL, то только возвращается текущая локаль и ничего не меняется.
При запуске основной программы по умолчанию выбирается переносимая локаль «C». Программу можно сделать переносимой для всех локалей вызвав
после инициализации программы, используя информацию об установках локали, полученную из вызова localeconv(3), используя многобайтные или широкосимвольные функции при обработке текста, если MB_CUR_MAX > 1 и используя strcoll(3), wcscoll(3) или strxfrm(3), wcsxfrm(3) для сравнения строк.
Sets or retrieves the run-time locale.
Syntax
Parameters
category
Category affected by locale.
locale
Locale specifier.
Return value
For example, the call
sets all categories, returning only the string
Remarks
_wsetlocale is a wide-character version of setlocale ; the locale argument and return value of _wsetlocale are wide-character strings. _wsetlocale and setlocale behave identically otherwise.
By default, this function’s global state is scoped to the application. To change this, see Global state in the CRT.
Generic-Text Routine Mappings
TCHAR.H routine | _UNICODE & _MBCS not defined | _MBCS defined | _UNICODE defined |
---|---|---|---|
_tsetlocale | setlocale | setlocale | _wsetlocale |
The category argument specifies the parts of a program’s locale information that are affected. The macros used for category and the parts of the program they affect are as follows:
The locale argument is a pointer to a string that specifies the locale. For information about the format of the locale argument, see Locale Names, Languages, and Country/Region Strings. If locale points to an empty string, the locale is the implementation-defined native environment. A value of C specifies the minimal ANSI conforming environment for C translation. The C locale assumes that all char data types are 1 byte and that their value is always less than 256.
At program startup, the equivalent of the following statement is executed:
setlocale( LC_ALL, «C» );
The locale argument can take a locale name, a language string, a language string and country/region code, a code page, or a language string, country/region code, and code page. The set of available locale names, languages, country/region codes, and code pages includes all those supported by the Windows NLS API. The set of locale names supported by setlocale are described in Locale Names, Languages, and Country/Region Strings. The set of language and country/region strings supported by setlocale are listed in Language Strings and Country/Region Strings. We recommend the locale name form for performance and for maintainability of locale strings embedded in code or serialized to storage. The locale name strings are less likely to be changed by an operating system update than the language and country/region name form.
which is the string that’s associated with the LC_ALL category.
The following examples pertain to the LC_ALL category. Either of the strings «.OCP» and «.ACP» can be used instead of a code page number to specify use of the user-default OEM code page and user-default ANSI code page for that locale name, respectively.
setlocale( LC_ALL, «.OCP» );
setlocale( LC_ALL, «.ACP» );
setlocale( LC_ALL, » _ » );
setlocale( LC_ALL, «French_Canada.1252» );
This call sets the locale to French Canada with the default ANSI code page:
setlocale( LC_ALL, «French_Canada.ACP» );
This call sets the locale to French Canada with the default OEM code page:
setlocale( LC_ALL, «French_Canada.OCP» );
setlocale( LC_ALL, «en-US» );
setlocale( LC_ALL, «English» );
setlocale( LC_ALL, «English_United States.1252» );
We recommend the first form for performance and maintainability.
The category must be either LC_ALL or LC_CTYPE to effect a change of code page. For example, if the default country/region and language of the host operating system are » United States » and » English «, the following two calls to setlocale are functionally equivalent:
setlocale( LC_ALL, «.1252» );
setlocale( LC_ALL, «English_United States.1252»);
For more information, see the setlocale pragma directive in the C/C++ Preprocessor Reference.
The function _configthreadlocale is used to control whether setlocale affects the locale of all threads in a program or only the locale of the calling thread.
UTF-8 Support
The string to specify UTF-8 mode is:
The following examples show how to specify the UTF-8 string:
UTF-8 mode is also enabled for functions that have historically translated char strings using the default Windows ANSI code page (ACP). For example, calling _mkdir(«рџЉ») while using a UTF-8 code page will correctly produce a directory with that emoji as the folder name, instead of requiring the ACP to be changed to UTF-8 before running your program. Likewise, calling _getcwd() in that folder will return a UTF-8 encoded string. For compatibility, the ACP is still used if the C locale code page is not set to UTF-8.
To use this feature on an OS prior to Windows 10, you must use app-local deployment or link statically using version 1803 (10.0.17134.0) of the Windows SDK or later. For Windows 10 operating systems prior to 1803 (10.0.17134.0), only static linking is supported.
Requirements
For more compatibility information, see Compatibility.