大家好!
作者今天在写代码时遇到了读取文本文件中的汉字时出现乱码的情况,所以本文介绍Windows操作系统中,C++读取文本文件中的汉字出现乱码情况原因及解决措施。
下面代码可以读取Stu.txt中的内容并输出:
ifstream ifs;
ifs.open(fileName, ios::in);
if (!ifs.is_open())
{
perror("file open error:\n");
printf("登录失败,文件不存在!!!\n");
return;
}
if (type == 1)
{
string fname,name;
string fpwd,pwd;
int fid,id;
cout << "请输入学生名:";
cin >> name;
cout << "请输入学生id:";
cin >> id;
cout << "请输入学生密码:";
cin >> pwd;
while (ifs >> fname && ifs >> fid && ifs >> fpwd)
{
cout << fname <<" " << fid << " " << fpwd << endl;
if (fname == name && fpwd == pwd && fid == id)
{
cout << "登录验证成功!!!" << endl;
system("pause");
system("cls");
person = new Student(id, name, pwd);
studentMenu(person);
system("pause");
}
}
我们可以看到该文本文件其实有数据为 张三 1 123456,我们进行如代码所示读取时应该也是读取到一模一样的,但却不是我们想要的结果:
我们可以看到第一个张三读出来是乱码,这事上面原因造成的呢?
回答:
c++读取文件出现乱码的原因是文本文件的编码格式和cmd的编码方式不一致造成的,修改文本文件编码格式,文本文件的编码格式和cmd的编码方式一致即可。
作者的电脑cmd编码格式为简体中文GBK,也就是ANSI,所以现在只需要将文本文件的编码格式也修改为ANSI即可。第一张图片中作者也标记出了当前文件编码格式为UTF-8,我们现在安装下面步骤进行修改即可:
将当前文本文件另存为在当前目录下,将之前那个覆盖即可。
覆盖时记得将下面的编码选择为ANSI形式。
修改结束后我们再来运行一遍:
现在可以看到能够正常读取文件文件中的汉字了!!!
至于怎么查看自己电脑的cmd编码格式:
我们同时按住 win 和 r 键,然输入cmd:
进入cmd窗口后,输入chcp命令后按回车键,即可查看当前系统的编码格式:
可以看到当前cmd的编码格式是936,也就是GBK(windows下默认格式)。
如此我们就可以查看的系统cmd默认编码格式!!!