Мне нужно выдать один символ, но кодовая страница, используемая моей системой, не имеет этого символа (т.е. испанский восклицательный знак «¡»).
Попытка
char excl = 173;
cout.put(excl);
но он печатает другой символ.
Если параметры операционной системы не настроены для соответствующей кодовой страницы, сначала необходимо установить локаль:
setlocale( LC_ALL, "esp" );
Это устанавливает ваш язык в Spanish_Spain.1252 (Windows-1252)
Тогда персонаж находится под значением 161
char excl = 161;
std::cout.put( excl );
Функция setlocale устанавливает указанную локаль системы или ее часть в качестве новой локали Си. Изменения остаются в силе и влияют на выполнение всех чувствительных к локали функций библиотеки C до следующего вызова setlocale.
Объяснение констант:
- LC_ALL: выбирает всю локаль C
- LC_COLLATE: выбирает категорию сопоставления локали C
- LC_CTYPE: выбирает категорию классификации символов локали C
- LC_MONETARY: выбирает категорию денежного форматирования локали C
- LC_NUMERIC: выбирает категорию числового форматирования локали C
- LC_TIME: выбирает категорию форматирования времени локали C
Что в итоге сработало
SetConsoleCP(1252);
SetConsoleOutputCP(1252);
Возможно, потому что я переустановил VC ++ и выбрал только английский языковой пакет во время установки.