带抑扬音 (Ê) 的拉丁文大写字母 'E'

Latin Capital Letter 'E' with Circumflex (Ê)

在Windows10的C程序中,我应该在屏幕上打印单词TYCHÊ,但我不能打印字母Ê(十六进制代码:\xCA):

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

char *Word;

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

怎么了?

Windows 在打印 Unicode 文本时很痛苦,但以下内容应该适用于所有现代 Windows 系统上的所有现代编译器(MSVC 19 或更高版本,g++ 9 或更高版本) (Windows 10 或更高),在 Windows 控制台和 Windows 终端中:

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

确保您的编译器将 UTF-8 作为输入字符集。对于 MSVC 19,您需要一个标志。我认为这是以后版本的默认设置,但我不确定这一点:

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

编辑:Dangit,我又看错了语言标签。 :-(
这是一些 C:

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

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

你可以试试这条线

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

这可以打印你的Ê。 我使用 CLion 来解决它,在另一个 IDE 上它可能不会给出相同的结果。

在 Windows 命令行中,您应该选择代码页 65001:

CHCP 65001  

如果您想直接从源代码静默执行此操作:

system("CHCP 65001 > NUL");  

在 C 源代码中,您应该使用 <locale.h> 标准头文件。

#include <locale.h>  

在你的程序执行开始时你可以这样写:

setlocale(LC_ALL, "");  

空字符串 "" 初始化为底层系统的默认编码(您之前选择的是 Unicode)。

但是,我的这个答案只是补丁,不是解决方案。
它最多可以帮助您打印法语字符。

在Windows命令行中处理编码不直接。
参见,例如:Command Line and UTF-8 issues