一种从unicode文本中逐行读取字符串的方法

// 要包含的头文件和命名空间

#include <iostream>

#include <sstream>  

#include <fstream>  

#include <string>


using namespace std;


// 宽字节字符串转成ansistring

int W2CH(const wchar_t* pUnicode, AnsiString& strDes)

{

char    *pANSI    = NULL;

int      nByte     = 0;

nByte = WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, NULL, 0, NULL, NULL);

pANSI = (char*)malloc(nByte);

WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, pANSI, nByte, NULL, NULL);

strDes = AnsiString(pANSI);

free(pANSI);

return strDes.Length();

}

// 示例函数

void testFunc()

{

ifstream fin;

fin.open("E:\\test\\aa.txt", ios::binary);

size_t index = 2;

int iLine = 0;

std::string strLineAnsi;

std::wstring wstrLine;

while (!fin.eof())

 {

fin.seekg(index, ios::beg);

wchar_t wch;

fin.read((char *)(&wch), 2);

if (wch == 0x000D || wch == '\n') // 判断回车换行符

{

AnsiString strDes = "";

int nDesLen = W2CH(wstrLine.c_str(), strDes);

wstrLine.erase(0, wstrLine.size() + 1);

iLine++;

index += 2; // 跳过回车符和行开头符

}

else

{

wstrLine.append(1, wch);

index += 2;

}

}

fin.clear();

fin.close();

}


注:开发环境win7,bcb6

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值