我正在试着用另一个人的C++代码打开源文件。在编写代码时,他使用的是比我现在使用的更老版本的visual studio。西里尔字母是扭曲的。
令人困惑的部分是编码问题。当我用任何程序打开.cpp文件时,除了notepad++英文字符外,可以阅读的文本都显示得很好,但西里尔字母是扭曲的。Notepad++显示它以ANSI编码打开该文件。如果我将正确显示文本从notepad++复制到其他程序(visual studio、标准windows记事本、浏览器中的google translator、一些在线编码转换器),它就会再次失真,就好像它复制的是字节而不是字符一样(这让我印象最深)。因为.cpp文件基本上只是一个文本文件,我不明白为什么我不能读它。如果它是损坏的文件- notepad++不会读取它。或者至少它会显示一些错误消息,不是吗?
下面是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";
附注:我知道关于编码的问题已经被问了几十亿次,但我没有找到合适的答案,所以如果之前有人回答了,请不要给我太大的打击。提前谢谢。
发布于 2019-01-12 14:07:23
我可以为你的问题建议一个可行的解决方案,它在我的Visual Studio2017和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;
}
然后在支持UTF8输出的ConEmu console emulator下编译和运行您的程序。根据ConEmu Unicode support documentation,您需要使用命令chcp 65001
切换到UTF-8
chcp 65001
test.exe
它给出了以下结果:
发布于 2019-01-17 20:36:46
将文件保存为Unicode编码,最好是UTF8。转到文件菜单,然后单击另存为
当你点击“用编码保存...”时,Visual Studio应该至少给出两个UTF8选项:
“带签名的UTF8”
“不带签名的UTF8”
微软产品更喜欢带签名的UTF8,而Notepad++更喜欢不带签名的UTF8。
https://stackoverflow.com/questions/54152110
复制相似问题