在Unicode模式下读取txt文件,中文解析出错的解决办法
1.首先将txt文件的编码模式改为ANSI
2.参考如下代码
有效代码1:
CFile file(_T("companyName.txt"), CFile::modeRead);//读ANSI编码的文件
int filelen = file.GetLength();
char *p = new char[filelen + 1];
file.Read(p, filelen);
p[filelen] = '\0';
USES_CONVERSION;//转化为wchar_t* 可以使用CString的Format函数。
wchar_t* wp = new wchar_t[filelen + 1];
wp = A2T(p);
CString str;
str.Format(_T("%s"), wp);
file.Close();
m_strCompany = str;
有效代码2:
CFile file(_T("companyName.txt"), CFile::modeRead);
int fileLen = (int)file.GetLength();
CStringA strA;
char* pBuf = strA.GetBuffer(fileLen + 1);
file.Read(pBuf, fileLen);
pBuf[fileLen] = '\0';
strA.ReleaseBuffer();
file.Close();
m_strCompany = strA;
有效代码3:
std::string str = "companyName.txt";
std::ifstream inf (str);
if (inf.is_open())
{
string line = "北京利泰克";
getline(inf, line);//读取第一行
CString str(line.c_str());
m_strCompany = str;
inf.close();
}
无效代码(ANSI和utf-8都不行):
std::string str = "companyName.txt";
std::wifstream inf (str);
if (inf)
{
wstring line = _T("北京利泰克");
getline(inf, line);//读取第一行
CString str(line.c_str());
m_strCompany = str;
inf.close();
}
else
{
m_strCompany = "文件未打开!";
}