c++ Visual Studio字符编码问题

h5qlskok  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(90)

我刚刚下载了Visual Studio 2019,但我遇到了字符串编码问题。这是我在C++中的代码:

cout << "èà" << "\n" << endl;

string str;
cout << "Write something: "
cin >> str;
cout << str << endl

字符串
第一行的输出是:

èà


如果我在第5行输入给予“èà”,输出是:

èà


我不明白为什么。你能帮帮我吗?
源文件编码是UTF-8,我已经检查过了。
请在您的回答中具体说明,因为我刚刚开始使用Visual Studio。

ttisahbt

ttisahbt1#

STD C++ 20溶液:

#include <iostream>
#include <string>
#ifdef _WIN32
#include <windows.h>
#include <clocale>
#endif

int main() {
#ifdef _WIN32
  // console UTF-8
  std::setlocale(LC_CTYPE, ".UTF8");
  SetConsoleOutputCP(CP_UTF8);
  SetConsoleCP(CP_UTF8);
#endif

  std::string str = "𨉟呐㗂越 🤑 αβγδ ñ";
  std::cout << str << std::endl;

  return 0;
}

字符串
MSVC需要以下标志:

set(CMAKE_CXX_STANDARD 20)
target_compile_options(hello_world PRIVATE /source-charset:utf-8 /execution-charset:utf-8)


如果你不添加这些标志,它将永远无法正确打印字符,这个问题似乎不会发生在clang上。
问题是,如果没有设置所描述的标志,控制台中的字符打印不正确,但实际上,从STD 20开始的操作将是UTF-8,类似于现代Linux操作系统。

相关问题