После 2 часов поиска и проб различных методов, я рву на себе волосы, пытаясь вывести на консоль специальные символы ascii! (С++)
typedef unsigned char UCHAR;
int main()
{
UCHAR c = '¥';
cout << c;
return 0;
}
Почему этот код печатает Ñ (209) вместо ¥ (165)???
Я пытался:
SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);
но, похоже, ни один из них ничего не делает, независимо от того, какие значения я ему передаю.
Кто-то еще подсказал, что шрифт консоли нужно менять через реестр. Но это смешно. Я не хочу, чтобы моим конечным пользователям приходилось менять значения реестра просто для того, чтобы запустить мою программу...
действительно странно то, что если я печатаю все символы ascii в файл (используя ofstream), они правильно отображаются как в блокноте, так и в редакторе визуальной студии (профессионал 2012 года).
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();
Буду признателен за любую оказанную помощь. Спасибо!
type
делает то же самое, что и ваша программа. Откройте окно командной строки и введитеtype ASCII.txt
и посмотрите, что будет выведено на консоль. - person PaulMcKenzie   schedule 27.06.2015type
. - person kfsone   schedule 27.06.2015Open a command-line window
Вы знакомы с командным окном? Это окно с подсказкойC:\>
(или похожей) - person PaulMcKenzie   schedule 27.06.2015type
дает тот же результат, что и ваша программа, проблема заключается в настройке кодовой страницы консоли, о которой упоминали другие. - person PaulMcKenzie   schedule 27.06.2015type
работать (при условии, что она ведет себя так же, как ваша программа). Существует командаchcp
— попробуйте использовать ее, чтобы заставитьtype
работать правильно. Как только вы найдете нужную кодовую страницу, вернитесь к своей программе и попытайтесь сделать то же самое сSetConsoleOutputCP
. - person PaulMcKenzie   schedule 27.06.2015chcp 65001
меняет консоль на UTF-8, как показано здесь: stackoverflow.com/questions/15470271/ Так что, возможно, вам следует указать65001
как кодовая страница? - person PaulMcKenzie   schedule 27.06.2015