C++ 没有按预期打印表情符号

C++ not printing emojis as expected

我有以下程序摘录

int main(){
  cout << "1) ✊\n";
  cout << "2) ✋\n";
  cout << "3) ✌️\n";

}

但当时我运行收到如下奇怪的短信

====================
rock paper scissors!
====================
1) 
2) 
3) ԣÅ

这似乎与我的终端无关,而是与编译结果有关,因为如果我 运行 echo ✊ 它会按预期显示。

见下面的例子

我目前正在使用以下编译命令和编译器版本 g++ *.cpp -o rock_paper_scissors.exe

g++.exe (Rev9, Built by MSYS2 project) 11.2.0 Copyright (C) 2021 Free Software Foundation, Inc.

最后,请注意,它之前按预期工作,但在某些时候,它停止工作,我在使用 system("pause") 后注意到,我猜这可能改变了编译配置的某些内容,如下所示是一个仅 Windows 的命令,我删除了这段代码但仍然有问题。

您可以在此处查看其余代码:https://github.com/guillene/RockPaperScissors

如果你的终端字体支持表情符号,并且你不想写太多代码(比如从 cout 切换到 wcout),你可以使用下面的 windows api 函数。

#include <windows.h>
#include <iostream>

int main(){
  SetConsoleOutputCP(CP_UTF8);
  std::cout << "1) ✊\n";
  std::cout << "2) ✋\n";
  std::cout << "3) ✌️\n";
  return 0;
}

参见:https://docs.microsoft.com/en-us/windows/console/setconsoleoutputcp