Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2024, 18:58   #1
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 66
По умолчанию wprintf как напечать кирилицу

Приветствую!
Не хочет выводить русские символы
Код:
#define STRICT //строгая проверка типов данных
#define UNICODE //кодировка UTF-8
//операторы препроцессора
#include <conio.h> // подключаем getch
#include <stdio.h> // подключаем printf
#include <locale.h>//заголовочный файл для локализации

using namespace std;//пространство имен - Стандартная Библиотека

//точка входа. Консольное приложение
int main()
{
/*Задает языковой стандарт по умолчанию, т.е. заданную по умолчанию
 для пользователя кодовую страницу ANSI, полученную от операционной системы.
*/
setlocale(LC_ALL, "");
//wchar_t ch;
inkey://метка
wprintf(L"Нажмите клавишу\n \"Esc\" - Выход\n");
//иинициализация переменной
int key=getch();//значение клавиши в переменную
//ch=key;
//если нажата Esc - выход
if (key==27)//код Esc
{
    return 0;//выход
}
//продолжаем если не Esc
else
{

wprintf(L"Код клавиши Dec=%d  Hex=%x\n",key,key);//выводим код
wprintf(L"\n Символ клавишы %lc \n",key);//выводим символ
goto inkey;
}
}
druidvic вне форума Ответить с цитированием
Старый 27.07.2024, 20:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,815
По умолчанию

https://ru.stackoverflow.com/questio...BE%D0%BB%D0%B8
p51x вне форума Ответить с цитированием
Старый 27.07.2024, 23:28   #3
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 66
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не получается. Все равно "фигня" выходит.
Код:

#define STRICT //строгая проверка типов данных
#define UNICODE //кодировка UTF-8
//операторы препроцессора
#include <conio.h> // подключаем getch
#include <stdio.h> // подключаем printf
#include <locale.h>//заголовочный файл для локализации

#include <windows.h>
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <wincon.h>

using namespace std;//пространство имен - Стандартная Библиотека

//точка входа. Консольное приложение
int main()
{
/*Задает языковой стандарт по умолчанию, т.е. заданную по умолчанию
 для пользователя кодовую страницу ANSI, полученную от операционной системы.
*/
setlocale(LC_ALL, "Russian");
SetConsoleOutputCP(CP_UTF8);
SetConsoleCP(CP_UTF8);
//wchar_t ch;
inkey://метка
wprintf(L"Нажмите клавишу\n \"Esc\" - Выход\n");
//иинициализация переменной
int key=getch();//значение клавиши в переменную
//ch=key;
//если нажата Esc - выход
if (key==27)//код Esc
{
    return 0;//выход
}
//продолжаем если не Esc
else
{

wprintf(L"Код клавиши Dec=%d  Hex=%x\n",key,key);//выводим код
wprintf(L"\n Символ клавишы %lc \n",key);//выводим символ
goto inkey;
}
}
Шрифт не разобрался как менять. И не уверен что дело в нем.
Другие варианты есть?
druidvic вне форума Ответить с цитированием
Старый 28.07.2024, 06:49   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,363
По умолчанию

Либо уберите #define UNICODE, либо используйте _getwch()
waleri на форуме Ответить с цитированием
Старый 28.07.2024, 06:58   #5
AbakBarama
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
Другие варианты есть?
Код:
setlocale(LC_ALL, ".OCP");
AbakBarama вне форума Ответить с цитированием
Старый 28.07.2024, 13:45   #6
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 167
По умолчанию

1. Текст программы (cpp-файл) должен быть в кодировке Unicode.
2. Сменить кодировку в консоли при помощи chcp (https://dzen.ru/a/XdtDP8THvh5BB_VF?y...om9uq836160195 )
DeepFlake вне форума Ответить с цитированием
Старый 28.07.2024, 23:32   #7
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 66
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Либо уберите #define UNICODE, либо используйте _getwch()
Благодарю!
Работающий код:

Код:
#define STRICT //строгая проверка типов данных
#define UNICODE //кодировка UTF-8
//операторы препроцессора
#include <locale.h>//заголовочный файл для локализации
//подключаем пространства имен для _getwch и wprintf
//#include <conio.h> или <wchar.h>
#include <wchar.h>

//точка входа. Консольное приложение
int main()
{
/*Задает языковой стандарт по умолчанию, т.е. заданную по умолчанию
 для пользователя кодовую страницу ANSI, полученную от операционной системы.
*/
    setlocale(LC_ALL, "");

inkey://метка
    wprintf(L"Нажмите клавишу\n \"Esc\" - Выход\n");
//иинициализация переменной
    wchar_t key=_getwch();//значение клавиши в переменную
//если нажата Esc - выход
    if (key==27)//код Esc
    {
        return 0;//выход
    }
//продолжаем если не Esc
    else
    {
        wprintf(L"Код клавиши Dec=%d  Hex=%x\n",key,key);//выводим код
        wprintf(L"\n Символ клавишы %lc \n",key);//выводим символ
        goto inkey;
    }
}
P.S. Прочитал множество книг по С++, но попадаются все старые (извиняюсь) "как говно мамонта".
Постоянно наступаю на те же "грабли" с UNICODE. Во всех примерах используется х32 кодировка. вместо wprintf - printf, wchar - char и т.п. для getline так и не смог найти wgetline. Посоветуйте что новое почитать.
Изображения
Тип файла: gif шляпа.gif (5.2 Кб, 21 просмотров)
druidvic вне форума Ответить с цитированием
Старый 29.07.2024, 06:26   #8
Алексей1153
фрилансер
Участник клуба
 
Регистрация: 11.10.2019
Сообщений: 1,032
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
не смог найти wgetline. Посоветуйте что новое почитать.
почитай про перегрузку функций и шаблоны функций
Алексей1153 вне форума Ответить с цитированием
Старый 29.07.2024, 07:25   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,363
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
P.S. Прочитал множество книг по С++, но попадаются все старые (извиняюсь) "как говно мамонта"
Они не старые, они про С++, тогда как всякие wgetch - это расширения от Microsoft для специально для Windows.
waleri на форуме Ответить с цитированием
Старый 29.07.2024, 22:42   #10
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 66
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Они не старые, они про С++, тогда как всякие wgetch - это расширения от Microsoft для специально для Windows.
Значит я не прав.
druidvic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
wprintf и fout druidvic Win Api 6 27.07.2024 10:44
Не могу понять почему в phpmyadmin неправильно отображает кирилицу Illusiony PHP 1 25.10.2015 22:54
Объединение и вывод напечать всех файлов из папки средствами VBA Сергей846 Microsoft Office Excel 3 09.12.2012 23:19
Как отобразить нормально кирилицу в alert в файле (js) SevenXP JavaScript, Ajax 2 09.10.2012 20:27