ReadUtf8ToString

	bool ReadUtf8ToString(const string &filename, string &content){
		content = "";
		FILE *myfile;
		wchar_t *name= new wchar_t[filename.length() * 2 + 5];
		if(name == NULL){
			cerr << "ReadUtf8ToString: Memory allocate error for " << filename << endl;
			return false;
		}
		swprintf(name, L"%S", filename.c_str()); 
		//ANSI string => Uicode string,注意,S要大写
		myfile=_wfopen(name,L"rb");  //以二进制方式读
		if(myfile == NULL){
			cerr << "ReadUtf8ToString: Can't open file: " << filename << endl;
			return false;
		}
		fseek(myfile,3,0);
		char buff[4098];
		//取得所有UTF-8字节
		while(fgets(buff,4098,myfile)){
			//先把UTF-8转换为UNICODE
			int num=MultiByteToWideChar(CP_UTF8,0,buff,-1,NULL,0);
			if(num <= 0){
				cerr << "UTF-8 Converting to UNICODE error for " << filename << endl;
				return false;
			}
			wchar_t *buffw2=new wchar_t[num];
			if(buffw2 == NULL){
				cerr << "ReadUtf8ToString: Memory allocate error for " << filename << endl;
				return false;
			}
			MultiByteToWideChar(CP_UTF8,0,buff,-1,buffw2,num);

			//再将Unicode转换为ANSI字符串
			int len = WideCharToMultiByte(CP_ACP, 0, buffw2, num, NULL, 0, NULL, NULL);
			if(len <= 0){
				cerr << "UNICODE Converting to ANSIC error for " << filename << endl;
				return false;
			}
			LPSTR lpsz = new CHAR[len+1];
			if(lpsz == NULL){
				cerr << "ReadUtf8ToString: Memory allocate error for " << filename << endl;
				return false;
			}
			WideCharToMultiByte(CP_ACP, 0, buffw2, num, lpsz, len, NULL, NULL);
			lpsz[len]='\0';
			content += string(lpsz);
			delete []buffw2;
			delete []lpsz;
		}
		delete []name;
		return true;
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值