Здраствуйте! Хочу считать символы из файла и вывести в консоль используя именно Win32 API. По какой то причине символы в консоль выводятся неправильно. Кодировка стоит utf-8 и русские символы работают нормально. Я пробовал записать в файл считанные символы и всё прекрасно работает. Совершенно не могу понять в чём проблема. Помогите пожалуйста!
#include <Windows.h>
#include <iostream>
#include <locale.h>
#include <io.h>
#include <fcntl.h>
typedef wchar_t uchar;
const int SymbolSize = (sizeof(uchar));
int SendError(const char* message) {
std::cout << message << std::endl;
return 0;
}
HANDLE OpenFileRead(const wchar_t* file_path) {
HANDLE hfile = CreateFileW(file_path, GENERIC_ALL, 0, 0, 3, FILE_ATTRIBUTE_NORMAL, 0);
if (hfile == 0) {
SendError("OpenFileError");
return 0;
}
return hfile;
}
LPVOID MemAlloc(int bytes) {
LPVOID Mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, bytes);
if (Mem == 0) {
SendError("MemoryAllocError");
return 0;
}
return Mem;
}
int Readfile(HANDLE file, void* buffer, int bytes_to_read) {
BOOL answer = ReadFile(file, buffer, bytes_to_read, 0, 0);
if (answer == 0) {
SendError("ReadFileError");
return -1;
}
return 0;
}
int Writefile(HANDLE file, void* buffer, int bytes_to_read) {
BOOL answer = WriteFile(file, buffer, bytes_to_read, 0, 0);
if (answer == 0) {
SendError("ReadFileError");
return -1;
}
return 0;
}
int main() {
system("chcp 1251");
_setmode(_fileno(stdout), _O_U8TEXT);
_setmode(_fileno(stdin), _O_U8TEXT);
_setmode(_fileno(stderr), _O_U8TEXT);
HANDLE file = OpenFileRead(L"C:\Users\rodio\OneDrive\Документы\ha lol.txt");
void* buffer = MemAlloc(20);
Readfile(file, buffer, 12);
uchar ubuffer = (uchar)buffer;
std::wcout << L"Петя" << std::endl;
std::wcout << ubuffer << std::endl;
}
Вывод консоли:
Текущая кодовая страница: 1251
Петя
晲††††
C:\Users\rodio\source\repos\TmodloaderDecompiler\x64\Debug\TmodloaderDecompiler.exe (процесс 5480) завершил работу с кодом 0. Нажмите любую клавишу, чтобы закрыть это окно…