我是使用逐字符去读文件的。代码如下:
ifstream ifs;
ifs.open(fileName, ios::in);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return false;
}
char c;
while ((c = ifs.get()) != EOF)
{
cout << c;
}
ifs.close();
但是,我发现一个问题:
如果txt文件里是中文,保持源代码不变,控制台是能正常输出文件的中文内容。
但是,将cout << c; 换成 cout << c << endl; 就会发现控制台不能输出中文了。
所以,读取中文文件时,c = ifs.get(),这里的c读到的到底是什么?
我又试了一个如下两个代码:
cout << '我'; //输出:52946
cout << "我"; //输出:我
从输出结果看,好像一个中文字不是一个字符
一个中文字占2个char空间。
1、占1个字节的编码是ISO-8859-1;
2、占2个字节的编码是GB2312、GBK、GB18030、UTF-16BE、UTF-16LE;
3、占3个字节的编码是UTF-8;
4、占4个字节的编码是UTF-16。