Cout char с другой кодовой страницы, чем система использует

Мне нужно выдать один символ, но кодовая страница, используемая моей системой, не имеет этого символа (т.е. испанский восклицательный знак «¡»).
Попытка

char excl = 173;
cout.put(excl);

но он печатает другой символ.

2

Решение

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

setlocale( LC_ALL, "esp" );

Это устанавливает ваш язык в Spanish_Spain.1252 (Windows-1252)
Тогда персонаж находится под значением 161

char excl = 161;
std::cout.put( excl );

станд :: Setlocale

Функция setlocale устанавливает указанную локаль системы или ее часть в качестве новой локали Си. Изменения остаются в силе и влияют на выполнение всех чувствительных к локали функций библиотеки C до следующего вызова setlocale.

Объяснение констант:

  • LC_ALL: выбирает всю локаль C
  • LC_COLLATE: выбирает категорию сопоставления локали C
  • LC_CTYPE: выбирает категорию классификации символов локали C
  • LC_MONETARY: выбирает категорию денежного форматирования локали C
  • LC_NUMERIC: выбирает категорию числового форматирования локали C
  • LC_TIME: выбирает категорию форматирования времени локали C
3

Другие решения

Что в итоге сработало

SetConsoleCP(1252);
SetConsoleOutputCP(1252);

Возможно, потому что я переустановил VC ++ и выбрал только английский языковой пакет во время установки.

0