ifstream 字符显示的问题
我初学C++ 喜欢随意编写一些程序来加深理解。遇到一个问题请教大家
程序如下
#include <iostream>
#include <fstream>
using namespace std;
void main()
{
char ch;
ifstream fin( "e:\\temp.txt " );
while( !fin.eof() )
{
fin > > ch;
cout < < ch;
}
}
在E盘随便建个temp.txt 文件 里面混放些中 英文 数字。
执行后显示发现temp.txt里面的内容空格没了
然后程序改为如下后发现只显示出了英文和数字 中文没了
#include <iostream>
#include <fstream>
using namespace std;
void main()
{
char ch;
ifstream fin( "e:\\temp.txt " );
while( !fin.eof() )
{
fin > > ch;
cout < < ch;
cout < < endl;
}
}
[解决办法]
cout < < ch;
把ch的值缓存起来了,所以两个字节的中文字符还是连在一起的,最后显示的时候还是中文字符
[解决办法]
首先纠正一点汉字并非一定是UNICODE,记事本编辑保存的文本文件默认编码类型为ANSI,也就是GB2312,英文单字节中文两字节,因为主要是本地使用主要考虑节省空间
再说第二个问题,没有显示乱码是因为显示的是空白你没看见,
用这行cout < <hex < <int((unsigned char)ch);在加上一个十六进制编辑器你可以看的更清楚
关于字符与编码 参看http://www.regexlab.com/zh/encoding.htm