Home > Software design >  Latin Capital Letter 'E' with Circumflex (Ê)
Latin Capital Letter 'E' with Circumflex (Ê)

Time:01-21

In a C program in Windows 10, I should print the word TYCHÊ on the screen, but I cannot print the letter Ê (Hex code: \xCA):

#include <stdlib.h>
#include <stdio.h>

char *Word;

int main(int argc, char* argv[]){
   Word = "TYCH\xCA";
   printf("%s", Word);
}

What's wrong?

CodePudding user response:

Windows is a pain when it comes to printing Unicode text, but the following should work with all modern compilers (MSVC 19 or later, g 9 or greater) on all modern Windows systems (Windows 10 or greater), in both Windows Console and Windows Terminal:

   #include <iostream>
   #include <windows.h>
   
   int main()
   {
     SetConsoleOutputCP( CP_UTF8 );
     std::cout << "TYCHÊ" << "\n";
   }

Make sure your compiler takes UTF-8 as the input character set. For MSVC 19 you need a flag. I think it is the default for later versions, but I am unsure on that point:

cl /EHsc /W4 /Ox /std:c  17 /utf-8 example.cpp
g   -Wall -Wextra -pedantic-errors -O3 -std=c  17 example.cpp

EDIT: Dangit, I misread the language tag again. :-(
Here’s some C:

#include <stdio.h>
#include <windows.h>

int main()
{
  SetConsoleOutputCP( CP_UTF8 );
  printf( "%s\n", "TYCHÊ" );
  return 0;
}

CodePudding user response:

You can try with this line

printf("%s%c", Word, 0x2580   82);

this can print your Ê. I used CLion for resolve it, on another IDE it may not give the same result.

CodePudding user response:

In the Windows Command Line you should choose the Code Page 65001:

CHCP 65001  

If you want to silently do that directly from the source code:

system("CHCP 65001 > NUL");  

In the C source code you should use the <locale.h> standard header.

#include <locale.h>  

At the beginning of your program execution you can write:

setlocale(LC_ALL, "");  

The empty string "" initializes to the default encoding of the underlying system (that you previously choose to be Unicode).

However, this answer of mine is just a patch, not a solution.
It will help you to print the french characters, at most.

Handling encoding in Windows command line is not straight.
See, for example: Command Line and UTF-8 issues

  •  Tags:  
  • Related