首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

读取txt资料有乱码

2012-11-05 
读取txt文件有乱码读取txt文件的时候出现了乱码,如图,这是什么原因啊,为什么输出8个字符后,还有那几个乱码

读取txt文件有乱码
读取txt文件的时候出现了乱码,如图,这是什么原因啊,为什么输出8个字符后,还有那几个乱码


#include<iostream>
#include<stdio.h>
#include<windows.h> 
#define MAX_BUFFER_LEN 8;


bool DealFile(char* fileName) //随便写个函数说明 

FILE *file; 
DWORD fileSize ,pos; 
pos=0;
int readLen ; 

//MAX_BUFFER_LEN 在头文件里定义,这里能够保证数据不丢失,也不至于内存逸出 
char *buffer = new char[8]; 
file = fopen(fileName,"r+b"); 
  if(file == NULL) return false; 
fseek(file,0,2); 
fileSize = ftell(file); //取得文件的大小 
fseek(file,0,0); 
do{ 
readLen=fread(buffer,sizeof(char),8,file); 
//std::cout<<fileSize;
//std::cout<<" ";
//std::cout<<buffer;
printf("%s\n",buffer);
if(readLen > 0) 

pos += readLen; 
//对读取的文件做处理 

}while(pos < fileSize); //循环读取文件 
 delete[] buffer; 
fclose(file); //释放资源 
return true; 

}

int main()
{
DealFile("a.txt");
return 0;
}


[解决办法]
file = fopen(fileName,"r+b");

改为
file = fopen(fileName,"r");

试试看
[解决办法]
buff的长度是8,读取文件的字符数量也是8
所以,buff是一个字符串数组,而不是一个c风格的字符串,buff没有'\0'结束符
用print把buff当作字符串输出,后面当然会有乱码,一直碰到内存中刚好有'\0'为止。
[解决办法]
#include "afxwin.h"
void main()
{
int leng = 0;
FILE *fs = fopen("C:\\1.txt","rb");
fseek(fs,0,SEEK_END);
leng = ftell(fs);
fseek(fs,0,0);
char a[100];
fread(a,1,100,fs);
MessageBox(0,a,0,0);
fclose(fs);
}


这样就没有问题,我只读取了100个字节,除了最后一个字可能是乱码之外,其他的都没有问题。
因为,最后一个字可能要用到第101个字节,但我只读取了100个字节,所以可能会出乱码。
[解决办法]

探讨

对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。

推荐使用WinHex软件查看文件或内存中的原始字节内容。

热点排行