C ++ Печать специальных символов ascii в консоль Windows

После 2 часов поисков и опробования различных методов, я выдернул свои волосы, пытаясь вывести на консоль специальные символы ascii! (C ++)

typedef unsigned char UCHAR;

int main()
{
UCHAR c = '¥';
cout << c;

return 0;
}

Почему этот код печатает С (209) вместо ¥ (165) ???

Я пробовал:

SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);

но ни один из них, похоже, ничего не делает, независимо от того, какие ценности я ему передаю.

Кто-то еще предположил, что шрифт консоли нужно менять через реестр. Но это смешно. Я не хочу, чтобы мои конечные пользователи начинали изменять значения реестра, просто чтобы запустить мою программу …

действительно странно то, что если я печатаю все символы ascii в файл (используя ofstream), они корректно отображаются как в блокноте, так и в редакторе Visual Studio (2012 Professional).

ofstream file("ASCII.txt");;
if (file.is_open())
{
UCHAR c = 0;
for (int i = 0; i < 256; i++)
{
c++;
file << c << "\t|\t" << (int)c << endl;
}
}
file.close();

Буду признателен за любую оказанную помощь.
Спасибо!

1

Решение

Добро пожаловать на боль кодирования 🙁

#include <iostream>
#include <windows>

int main() {
SetConsoleCP(437);
SetConsoleOutputCP(437);
std::cout << (char)157 << "\n";
}

Формирует:

Результат компиляции и выполнения

Проблема в том, что ваш исходный файл не в CP437 и, следовательно, символ имеет значение, отличное от того, которое вы пытаетесь напечатать (как вы заметили, в вашем исходном значении указано значение 165, что в CP437 является другим символом).

https://en.wikipedia.org/wiki/Code_page_437

2

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


По вопросам рекламы [email protected]