我已经尝试在vs code中更改编码,但俄罗斯字符一直显示为"?? ">
尝试将setlocale(LC_ALL, "Russian")
添加到您的代码开头。
auto utf16_to_utf8 = [](const std::wstring &value) -> std::string {
int len = WideCharToMultiByte(CP_UTF8, 0, value.c_str(), -1, NULL, 0, 0, 0);
if (len)
{
std::string utf8 = std::string(len, ' ');
WideCharToMultiByte(CP_UTF8, 0, value.c_str(), -1, &utf8[0], len, 0, 0);
return utf8;
}
return std::string();
};
auto utf8_to_utf16 = [](const std::string &value) -> std::wstring {
int len = MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, NULL, 0, 0, 0);
if (len)
{
std::wstring utf16 = std::wstring(len, ' ');
MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, &utf16[0], len, 0, 0);
return utf16;
}
return std::string();
};
然后做:std::wcout<<utf8_to_utf16(u8"Приветn");
Windows终端在显示UTF-8方面出了名的糟糕,直到最近的Windows 10或11。所以你最好输出UTF-16。
解决方案是勾选"使用Unicode UTF-8支持全球语言";