вывод utf8 в консоль с Visual Studio (широкий поток)

Этот кусок кода работает, если я скомпилировал его с помощью mingw32 на Windows 10.
и выдает правильный результат, как вы можете видеть ниже:

C:\prj\cd>bin\main.exe
1°à€3§4ç5@の,は,でした,象形字 ;

Действительно, когда я пытаюсь скомпилировать его с помощью Visual Studio 17, тот же код выдает неверные символы

/out:prova.exe
prova.obj

C:\prj\cd>prova.exe
1°à€3§4ç5@ã®,ã¯,ã§ã—ãŸ,象形字 ;

C:\prj\cd>

вот исходный код:

#include <windows.h>
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <string>
#include <iostream>

int main ( void )
{
_wsetlocale(LC_ALL, L"it_IT.UTF-8" );   // set locale wide string
_setmode(_fileno(stdout), _O_U8TEXT);   // set Locale for console
SetConsoleCP( CP_UTF8 ) ;
SetConsoleOutputCP(CP_UTF8);

// Enable buffering to prevent VS from chopping up UTF-8 byte sequences
setvbuf(stdout, nullptr, _IOFBF, 1000);

std::wstring test = L"1°à€3§4ç5@の,は,でした,象形字 ;";
std::wcout << test << std::endl;

}

Я прочитал несколько тем:

Как напечатать строки UTF-8 в std :: cout в Windows?

Как заставить std :: wofstream записать UTF-8?

и многие другие, но кое-что идет не так …
вы не могли бы мне помочь ?

1

Решение

Следующие работы для меня:

#include <string>
#include <iostream>
#include <Windows.h>

int main(void)
{
// use utf8 literal
std::string test = u8"1°à€3§4ç5@の,は,でした,象形字 ;";

// set code page to utf8
SetConsoleOutputCP(CP_UTF8);

// Enable buffering to prevent VS from chopping up UTF-8 byte sequences
setvbuf(stdout, nullptr, _IOFBF, 1000);

// printing std::string to std::cout, not std::wstring to std::wcout
std::cout << test << std::endl;
}

Но мне пришлось изменить шрифт на SimSun-ExtB:
введите описание изображения здесь

Затем отображаются все символы:
введите описание изображения здесь

1

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

Других решений пока нет …

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