Setlocale lc all russian что означает

Устанавливает или извлекает языковой стандарт времени выполнения.

Синтаксис

Параметры

category
Категория, на которую влияет языковой стандарт.

locale
Указатель языкового стандарта.

Возвращаемое значение

задает все категории, возвращая только строку

Комментарии

_wsetlocale — это версия с расширенными символами для setlocale ; аргумент locale и возвращаемое значение _wsetlocale являются строками с расширенными символами. Поведение _wsetlocale и setlocale идентично в противном случае.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Универсальное текстовое сопоставление функций

TCHAR.H ассемблер_UNICODE & _MBCS не определено_MBCS определяется_UNICODE определяется
_tsetlocalesetlocalesetlocale_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++ по книжке Страуструпа, не выводятся русские символы. Вот код:

В Code::Blocks всё работает и без крякозяблов. Даже без setlocale.

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означает

6 ответов 6

Для данной задачи существует множество решений. Если вам нужно быстрое и не обязательно универсальное решение, чтобы сильно не разбираться, прокручивайте к разделу «Менее правильные, но пригодные решения».

Правильное, но сложное решение

Для начала, проблема у консоли Windows состоит в том, что её шрифты, которые стоят «по умолчанию», показывают не все символы. Вам следует сменить шрифт консоли на юникодный, это позволит работать даже на английской Windows. Если вы хотите поменять шрифт только для вашей программы, в её консоли нажмите на иконку в левом верхнем углу → Свойства → Шрифт. Если хотите поменять для всех будущих программ, то же самое, только заходите в Умолчания, а не Свойства.

Дальнейшее рассмотрение касается лишь Microsoft Visual Studio. Если у вас другой компилятор, пользуйтесь предложенными на свой страх и риск, никакой гарантии нету.

Настроив среду, перейдём к решению собственно задачи.

(Ещё одна проблема, которую решает использование широких строк: узкие строки при компиляции кодируются в однобайтную кодировку используя текущую системную кодовую страницу, то есть, ANSI-кодировку. Если вы компилируете вашу программу на английской Windows, это приведёт к очевидным проблемам.)

Вам нужно _setmode(_fileno(. ), _O_U16TEXT); для переключения режима консоли:

Такой способ должен работать правильно с вводом и выводом, с именами файлов и перенаправлением потоков.

Если очень не хочется переходить на Unicode, и использовать однобайтную кодировку, будут возникать проблемы. Для начала, символы, не входящие в выбранную кодировку (например, для случая CP1251 — базовый английский и кириллица), работать не будут, вместо них будет вводиться и выводиться абракадабра. Кроме того, узкие строковые константы имеют ANSI-кодировку, а это значит, что кириллические строковые литералы на нерусской системе не сработают (в них будет зависимая от системной локали абракадабра). Держа в голове эти проблемы, переходим к изложению следующей серии решений.

Менее правильные, но пригодные решения

В любом случае, поставьте юникодный шрифт в консоли. (Это первый абзац «сложного» решения.)

Убедитесь, что ваши исходники в кодировке CP 1251 (это не само собой разумеется, особенно если у вас не русская локаль Windows). Если при добавлении русских букв и сохранении Visual Studio ругается на то, что не может сохранить символы в нужной кодировке, выбирайте CP 1251.

(1) Если компьютер ваш, вы можете поменять кодовую страницу консольных программ на вашей системе. Для этого сделайте вот что:

Преимущества способа: примеры из книг начнут работать «из коробки». Недостатки: смена реестра может повлечь за собой проблемы, кодировка консоли меняется глобально и перманентно — это может повлиять сломать другие программы. Плюс эффект будет только на вашем компьютере (и на других, у которых та же кодировка консоли). Плюс общие проблемы неюникодных способов.

(2) Вы можете поменять кодировку только вашей программы. Для этого нужно сменить кодировку консоли программным путём. Из вежливости к другим программам не забудьте потом вернуть кодировку на место!

Это делается либо при помощи вызова функций

в начале программы, либо про помощи вызова внешней утилиты

(То есть, у вас должно получиться что-то вроде

и дальше обыкновенный код программы.)

Можно обернуть эти вызовы в класс, чтобы воспользоваться плюшками автоматического управления временем жизни объектов C++.

(если выполняете задание из Страуструпа можно вставить в конец заголовочного файла std_lib_facilities.h )

Если вам нужен не русский, а какой нибудь другой язык, просто замените 1251 на идентификатор нужной кодировки (список указан ниже в файле), но, разумеется, работоспособность не гарантируется.

Остались методы, которые тоже часто встречаются, приведём их для полноты.

Методы, которые работают плохо (но могут помочь вам)

Метод, который часто рекомендуют — использование конструкции setlocale(LC_ALL, «Russian»); У этого варианта (по крайней мере в Visual Studio 2012) гора проблем. Во-первых, проблема с вводом русского текста: введённый текст передаётся в программу неправильно! Нерусский текст (например, греческий) при этом вовсе не вводится с консоли. Ну и общие для всех неюникодных решений проблемы.

Поэтому стоит хранить исходники в Unicode (например, UTF-8).

Причем сохранить следует с сигнатурой

Ситуацию частично спасает пересохранение исходников в кодировке UTF-8 с обязательным символом BOM, без него Visual Studio начинает интерпретировать «широкие» строки с кириллицей весьма своеобразно. Однако, указав BOM (Byte Order Mark — метка порядка байтов) кодировки UTF-8 — символ, кодируемый тремя байтами 0xEF, 0xBB и 0xBF, мы получаем узнавание кодировки UTF-8 в любой системе

Стоит пояснить кое-что для тех, кто ищет правильный ответ по поводу функции setlocale:

Метод, который часто рекомендуют — использование конструкции setlocale(LC_ALL, «Russian»); У этого варианта (по крайней мере в Visual Studio 2012) гора проблем. Во-первых, проблема с вводом русского текста: введённый текст передаётся в программу неправильно! Нерусский текст (например, греческий) при этом вовсе не вводится с консоли. Ну и общие для всех неюникодных решений проблемы.

Я добавлю по этому методу побольше информации: Его вообще не правильно рекомендуют!

Начнём с первого: Во втором параметре функция принимает не название страны или языка, хотя в некоторых случаях она сработает, а языковый идентификатор, согласно ISO 3166-1. Поэтому правильно и корректно указывать: «ru-RU». Теперь второе: в документации к этой функции написано чёрным по белому: «If execution is allowed to continue, the function sets errno to EINVAL and returns NULL.» Что буквально толкуется: при возникновении ошибки, функция устанавливает значение переменной errno в EINVAL и возвращает NULL.

В случае возникновения ошибки, errno всегда будет равен EINVAL, что означает: не верный аргумент. Поэтому её проверять нет смысла, а вот исполнение функции должно быть проверено. Поэтому правильный вызов функции setlocale выглядит следующим образом:

И не забывайте, что setlocale устанавливает локальную таблицу только для ANSI кодировки, поэтому и не будут отображаться греческие, испанские, китайские и даже японские знаки. Для русского языка это будет таблица номер 1251.

И важно: почему эта функция является надёжней, нежели прямая установка таблицы символов через SetConsoleCP, ибо потому, что она переключает все внутренние надстройки именно для раскладки под язык. Начиная от стандарта отображения даты, заканчивая знаками разделителя.

И да, не стоит устанавливать языковый указатель виде «ru», так как в зависимости от сборки самой ось и имеющихся языковых пакетов, может установиться ru-BY, ru-UA, ru-MO и другие языковые стандарты, значительно отличающиеся от ru-RU. И категорично нельзя указывать «Russia», «Russian», «Russian Federation» (да, такую вакханалию уже встречал пару раз). Хотя функция производит проверку и по названию региона, не всегда в таблице локализации это указано, или может быть указано «Россия» или «Русский» уже на нашей раскладке. Это и есть основная ошибка, из-за которой функция setlocale зачастую отказывается работать.

И да, для приложения, работающего в режиме юникогда, стоит использовать функцию _wsetlocale. Она идентична, и также устанавливает базовые настройки для локализации. Кроме того, если проект приложения в Visual Studio настроен в режим юникода, то и будет работать только _wsetlocale, так как setlocale, по документации, не приспособлена к работе с юникодом вообще никак.

Совсем забыл указать, что функция setlocale и _wsetlocale, в случае успеха вернёт именно идентификатор региона. То есть, в нашем случае строку «ru_RU\0».

Источник

Настройка локали

При изменении регистра русских букв может возникнуть проблема. Чтобы ее избежать, необходимо правильно настроить локаль (совокупность локальных настроек системы).

Настройка локали в языке C

В первом параметре указывается категория в виде числа от 0 до 5 или соответствующий числу макрос:

Чтобы использовать другую кодировку нужно указать ее название после точки, например, «.1251» или «Russian_Russia.1251» :

Вместо названия можно указать пустую строку. В этом случае будет использоваться локаль, настроенная в системе:

В качестве значения функция возвращает указатель на строку с названием локали, соответствующей заданной категории, или нулевой указатель в случае ошибки. Если во втором параметре передан нулевой указатель, то функция возвращает указатель на строку с названием текущей локали:

После настройки локали многие функции будут работать не так как раньше. Например, от настроек локали зависит вывод функции printf() :

Некоторые функции позволяют указать локаль в качестве параметра, например, функция _printf_l() :

Пример настройки локали и вывода текущего названия локали приведен в листинге 7.1.

Листинг 7.1. Настройка локали

Функция localeconv() позволяет получить информацию о способе форматирования вещественных чисел и денежных сумм для текущей локали. Прототип функции:

Объявление структуры lconv выглядит следующим образом:

В VC++ доступны также следующие поля структуры lconv :

Настройка локали в языке C++

Второй и третий конструкторы позволяют задать название локали. Вместо названия можно указать пустую строку. В этом случае будет использоваться локаль, настроенная в системе. Пример:

Четвертый конструктор создает копию объекта:

Пятый и шестой конструкторы в параметре cat позволяют указать следующие флаги (или их комбинацию через побитовый оператор | ):

Пример создания объекта класса locale для всех категорий:

Пример сравнения локалей:

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означает
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

Источник

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Как включить русский язык в Си

На начальных этапах программирования многие новички сталкиваются с такой проблемой: они в коде пишут какое-либо сообщение на русском языке для консоли (например, используя printf), но при запуске программы вместо русских слов появляются какие-то непонятные знаки. Покажем, как избавиться от этой проблемы.

Например, при запуске вот этой программы:

В консоли будет отображено следующее:

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означает

Всё дело в том, что мы не подключили русскую локализацию.

Исправить эту ошибку очень легко!

Для начала надо добавить следующую библиотеку:

Она отвечает за локализацию.

А затем нам надо просто написать в начале тела кода вот эту строку:

Функция setlocale задаёт локализацию программы. По умолчанию это только английский язык.
LC_ALL указывает программе, что локализированы будут все функции.

“Rus”, как легко догадаться говорит о том, что локализация произойдёт на русский язык.

Вот и всё! Мы включили русский язык в Си. Наша программа модернизирована и обогащена на две строки. Теперь она будет выглядеть вот так:

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означает

Поделиться в соц. сетях:

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(0, «») от setlocale(LC_ALL,»»)?

выдают одинаковый результат (ну, на моей русской машине):
Russian_Russia.1251
Russian_Russia.1251

Нашел такой пост на форуме вот здесь Что значит setlocale(0,»»);

setlocale ( LC_ALL, «Russian» ); //определение русского языка

Если в качестве locale передана пустая строка «», имена локалей будут взяты из соответствующих переменных окружения или переменной с именем «LANG».

Если в качестве locale передан NULL или «0», локаль изменена не будет, а будет возвращено текущее значение.

Добавлено через 4 минуты
Может кто объяснить поподробнее?

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означаетЧем можно заменить функцию setlocale(LC_ALL, «RUSSIAN»)?
напишите пожалуйста пример!!

Не работает «setlocale( LC_ALL,»Russian» )»
В одной программе setlocale( LC_ALL,»Russian» ) работает, а в другой, ничем не отличающейся от.

Не работает setlocale(LC_ALL,»Russian») или Говорим по русски
оператор setlocale(LC_ALL,»Russian»); при проверке одной консольной программы сpp в 3 оболочках.

Различие в переносимости.

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означаетФункция setlocale( LC_ALL,»Russian» ) в Visual Studio 2017
Здарова всем. Давно уже пользуюсь советами с этого форума, но обращаюсь сюда за помощью впервые.

Не работает setlocale ( LC_ALL,»RUS») при #include
Для борьбы с иероглифами в консоли использовал setlocale ( LC_ALL,»RUS») и вот.

Setlocale lc all russian что означает. Смотреть фото Setlocale lc all russian что означает. Смотреть картинку Setlocale lc all russian что означает. Картинка про Setlocale lc all russian что означает. Фото Setlocale lc all russian что означаетФункция setlocale( LC_ALL,»Russian» ) и класс String
У меня есть класс и головная функция этого класса. Переменные типа стринг я могу водить в консоли.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *