Setlocale lc all что означает
Устанавливает или извлекает языковой стандарт времени выполнения.
Синтаксис
Параметры
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.
Спасибо за статью.
Setlocale lc all что означает
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) для сравнения строк.
UCRT: сведения о строках имени языкового стандарта, языка, а также страны или региона
аргумент locale для функций setlocale, _wsetlocale, _create_localeи _wcreate_locale можно задать с помощью имен языковых стандартов, языков, кодов стран и регионов, а также кодовых страниц, поддерживаемых API NLS Windows. Аргумент locale принимает следующую форму:
locale :: «locale-name»
| «язык[_страна-регион[.Code-page]] »
| «.кодовая страница»
| Ц
| «»
| ЗАКАНЧИВАЮЩ
Язык[_страна-регион[.Code – page]] форма хранится в настройках языкового стандарта для категории, если для создания языкового стандарта используется строка языка, строка языка и строка страны или региона. Набор поддерживаемых строк с названием языка представлен в списке строк для языка, а список поддерживаемых строк страны или региона представлен в списке строк для страны или региона. Если указанный язык не связан с указанной страной или регионом, язык по умолчанию для указанной страны или региона сохраняется в параметре языкового стандарта. Не рекомендуется использовать эту форму для строк с языкового стандарта, внедренных в коде или сериализованных в хранилище, поскольку эти строки чаще подвержены изменениям при обновлении операционной системы, чем форма имени языкового стандарта.
Значение аргумента locale задает минимальную подходящую среду ANSI для преобразования C. Языковой стандарт C предполагает, что все типы данных char соответствуют 1 байту, а их значение всегда меньше 256. Если аргумент locale указывает на пустую строку, языковой стандарт соответствует исходной среде, определенной реализацией.
LC-ALL-specifier :: locale
| [LC_COLLATE =locale] [; LC_CTYPE =locale] [; LC_MONETARY =locale] [; LC_NUMERIC =locale] [; LC_TIME =locale]
Поддержка UTF-8
setlocale
(PHP 4, PHP 5, PHP 7, PHP 8)
setlocale — Устанавливает настройки локали
Описание
Альтернативная сигнатура (не поддерживается с именованными аргументами):
Устанавливает настройки локали.
Список параметров
Если в качестве locales передан массив, или после этого аргумента следуют дополнительные аргументы, функция будет использовать элементы массива или аргументы по порядку в качестве имён локали до тех пор, пока установка локали не будет успешной. Это удобно, если одна и та же локаль имеет разное имя в различных системах, или для создания запасного варианта при отсутствии какой-либо локали в системе.
Необязательные аргументы в виде строк или массивов для установки настроек локали до первой успешной попытки.
Каждый элемент массива пытается установить новую локаль до первой успешной попытки. Это полезно, если локаль известна под разными именами в разных системах или для обеспечения запасного варианта для возможно недоступного языкового стандарта.
На Windows setlocale(LC_ALL, ») устанавливает имена локалей из системных региональных/языковых настроек (доступных через Панель Управления).
Возвращаемые значения
Недопустимое имя категории также вызывает предупреждение. Имена локалей и категорий описаны в » RFC 1766 и » ISO 639. Разные системы имеют различные схемы именования локалей.
Примеры
Пример #1 Примеры использования setlocale()
Пример #2 Примеры использования setlocale() в Windows
Примечания
User Contributed Notes 31 notes
be careful with the LC_ALL setting, as it may introduce some unwanted conversions. For example, I used
setlocale (LC_ALL, «Dutch»);
to get my weekdays in dutch on the page. From that moment on (as I found out many hours later) my floating point values from MYSQL where interpreted as integers because the Dutch locale wants a comma (,) instead of a point (.) before the decimals. I tried printf, number_format, floatval. all to no avail. 1.50 was always printed as 1.00 🙁
When I set my locale to :
setlocale (LC_TIME, «Dutch»);
my weekdays are good now and my floating point values too.
I hope I can save some people the trouble of figuring this out by themselves.
If you are looking for a getlocale() function simply pass 0 (zero) as the second parameter to setlocale().
Beware though if you use the category LC_ALL and some of the locales differ as a string containing all the locales is returned:
?>
If you are looking to store and reset the locales you could do something like this:
?>
The above works here (Ubuntu Linux) but as the setlocale() function is just wrapping the equivalent system calls, your mileage may vary on the result.