После 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();
Буду признателен за любую оказанную помощь.
Спасибо!
Добро пожаловать на боль кодирования 🙁
#include <iostream>
#include <windows>
int main() {
SetConsoleCP(437);
SetConsoleOutputCP(437);
std::cout << (char)157 << "\n";
}
Формирует:
Проблема в том, что ваш исходный файл не в CP437 и, следовательно, символ имеет значение, отличное от того, которое вы пытаетесь напечатать (как вы заметили, в вашем исходном значении указано значение 165, что в CP437 является другим символом).