c – 如何在visual studio中打开.cpp文件并使其正确显示带有西里尔字符的字符串文字?

我正在尝试使用其他人的C代码打开源文件.在编写代码时,他使用了旧版本的visual studio,现在我就拥有了.

西里尔字母被扭曲了.

愚蠢地混淆它的一部分是编码问题.当我用任何程序打开.cpp文件时,可以读取除记事本之外的文本英文字符完全显示,但西里尔字母是扭曲的.记事本显示它以ANSI编码打开该文件.如果我将正确显示的文本从记事本复制到其他程序(视觉工作室,标准窗口记事本,浏览器中的谷歌翻译器,一些在线编码转换器),它会再次变形,就好像它是复制字节而不是字符一样(这个让我大吃一惊)所有).
由于.cpp文件基本上只是文本文件,我不明白为什么我不能读它.如果它是损坏的文件 – 记事本不会读它.或者至少它会显示一些错误信息,不是吗?

以下是visual studio如何显示它:

cout << "����� ����� � ������� 100-999";
cout << "\n�������� 2 (��i� ����� �� � �� ������� �����) = " << d;
cout << "\n�������� 3 (��i� ����� �� �� �� ��������� ����) = " << f << "\n";

这是正确的代码:

cout << "серед чисел в діапазоні 100-999";
cout << "\nзавдання 2 (усіх чисел де є дві однакові цифри) = " << d;
cout << "\nзавдання 3 (усіх чисел де не має однакових цифр) = " << f << "\n";

附:我知道关于编码的问题已经被问了十亿次,但是我找不到合适的答案,所以如果以前得到答复,请不要打我.提前致谢.

最佳答案 我可以为您的问题建议一个可行的解决方案,它在我的Visual Studio 2017和
ConEmu中使用UTF-8编码输出正常工作.

首先使用u8 literal strings,它给你UTF-8输出:

#include <iostream>

int main()
{
    double d = 0.0;
    double f = 1.0;
    std::cout << u8"серед чисел в діапазоні 100-999";
    std::cout << u8"\nзавдання 2 (усіх чисел де є дві однакові цифри) = " << d;
    std::cout << u8"\nзавдання 3 (усіх чисел де не має однакових цифр) = " << f << "\n";
    return 0;
}

然后在ConEmu console emulator下编译并运行程序,该程序支持UTF-8输出.根据ConEmu Unicode support documentation,您需要使用命令chcp 65001切换到UTF-8:

chcp 65001
test.exe

它给了我以下结果:

《c – 如何在visual studio中打开.cpp文件并使其正确显示带有西里尔字符的字符串文字?》

点赞