Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I print Unicode to the output console in C with Visual Studio?

As the question says, do I have to do in order to print Unicode characters to the output console? And what settings do I have to use? Right now I have this code:

wchar_t* text = L"the 来";
wprintf(L"Text is %s.\n", text);
return EXIT_SUCCESS;

and it prints: Text is the ?.

I've tried to change the output console's font to MS Mincho, Lucida Console and a bunch of others but they still don't display the japanese character.

So, what do I have to do?

like image 998
Eärendil Baggins Avatar asked Dec 19 '22 03:12

Eärendil Baggins


2 Answers

This is code that works for me (VS2017) - project with Unicode enabled

#include <stdio.h>
#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    wchar_t * test = L"the 来. Testing unicode -- English -- Ελληνικά -- Español." ;

    wprintf(L"%s\n", test);
}

This is console

output

After copying it to the Notepad++ I see the proper string

the 来. Testing unicode -- English -- Ελληνικά -- Español.

OS - Windows 7 English, Console font - Lucida Console

Edits based on comments

I tried to fix the above code to work with VS2019 on Windows 10 and best I could come up with is this

#include <stdio.h>
int main()
{
    const auto* test = L"the 来. Testing unicode -- English -- Ελληνικά -- Español.";

    wprintf(L"%s\n", test);
}

When run it "as is" I see Default console settings

When it is run with console set to Lucida Console fond and UTF-8 encoding I see Console switched to UTF-8

As the answer to 来 character shown as empty rectangle - I suppose is the limitation of the font which does not contain all the Unicode gliphs

When text is copied from the last console to Notepad++ all characters are shown correctly

like image 183
Artemy Vysotsky Avatar answered Apr 28 '23 03:04

Artemy Vysotsky


The characters '来' may not be in your system character code page. You need to save the characters as utf-8.

in vs2013, I try this:

// save as utf-8
#pragma execution_character_set( "utf-8" )

#include <Windows.h>

char *s = "the 来";

int main(){
    // set console code page to utf-8
    SetConsoleOutputCP(65001);
    printf("%s\n",s);
    return 0;
}
like image 35
FrankRx Avatar answered Apr 28 '23 02:04

FrankRx