带抑扬音 (Ê) 的拉丁文大写字母 '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
在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