c ++ - output utf8 i konsol med Visual Studio (bred stream)

Indlæg af Hanne Mølgaard Plasc

Problem



Dette stykke kode fungerer, hvis jeg kompilerede det med mingw32 på Windows 10.
og udsender rigtigt resultat, som du kan se nedenfor:


C:prjcd>binmain.exe
1°à€3§4ç5@の,は,でした,象形字 ;


Faktisk når jeg forsøger at kompilere det med Visual Studio 17, udsender samme kode forkerte chakere


/out:prova.exe
prova.obj

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

C:prjcd>


her kildekode:


#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;

}


Jeg har læst flere emner:


Sådan udskrives UTF-8-strenge til std :: cout on Windows?


Hvordan laver std :: wofstream skrive UTF-8?


og mange andre, men noglehtins går galt ...
kan du hjælpe mig ?

Bedste reference


Følgende virker for mig:


#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; 
}


Men jeg var nødt til at ændre skrifttypen til SimSun-ExtB:
Indtast billedbeskrivelse her [8]


Så vises alle tegnene:
Indtast billedbeskrivelse her [9]