您的位置:首页 > 其它

Unicode and ANSI

2017-07-27 19:16 369 查看
在电脑上新建一个文本文件,他默认是以ANSI格式编码的,所以在读取文件的时候,只能以多字节的方式来读取,

不能用宽字符来读取。但可以在另存为的时候,选择存储文件的编码格式,使用Unicode或者UTF-8的格式,

如果选用Unicode,那么就可以使用宽字符来读取文件,而不会出现乱码的情况。

下面是详细的代码:

/************************************************************************/
/* read ini file(Multi Bytes)                                           */
/************************************************************************/
void CMy07271Dlg::OnBnClickedButton1()
{
CFile file;
if(!file.Open(_T("test.txt"), CFile::modeRead))
return ;

char szBuf[64] = {0};
char szRes[1024] = {0};
// 如果此时调用strlen求字符串长度,结果为0,因为第一个字符就是结束符
int nszResLen = strlen(szRes);
int nszBufLen = strlen(szBuf);

while(1)
{
int nReadCount = file.Read(szBuf, 4);
if(nReadCount > 0)
{
strcat(szRes, szBuf);
memset(szBuf, 0, sizeof(szBuf));
}
else
break;
}
nszResLen = strlen(szRes);

wchar_t* pszwRes = NULL;
int nLenReq = MultiByteToWideChar(CP_ACP, 0, szRes, strlen(szRes), NULL, 0);
pszwRes = new wchar_t[nLenReq + 1];
memset(pszwRes, 0, sizeof(wchar_t) * (nLenReq + 1));
MultiByteToWideChar(CP_ACP, 0, szRes, strlen(szRes), pszwRes, nLenReq);

MessageBox(pszwRes, _T("title"), MB_OKCANCEL | MB_ICONINFORMATION);
}

/************************************************************************/
/* read txt file(Multi Bytes)                                           */
/************************************************************************/
void CMy07271Dlg::OnBnClickedButton2()
{
CFile file;
if(!file.Open(_T("test.txt"), CFile::modeRead))
return ;

char szBuf[64] = {0};
char szRes[1024] = {0};
// 如果此时调用strlen求字符串长度,结果为0,因为第一个字符就是结束符
int nszResLen = strlen(szRes);
int nszBufLen = strlen(szBuf);

while(1)
{
int nReadCount = file.Read(szBuf, 4);
if(nReadCount > 0)
{
strcat(szRes, szBuf);
memset(szBuf, 0, sizeof(szBuf));
}
else
break;
}
nszResLen = strlen(szRes);                  // nszResLen != 0

wchar_t* pszwRes = NULL;
int nLenReq = MultiByteToWideChar(CP_ACP, 0, szRes, strlen(szRes), NULL, 0);
pszwRes = new wchar_t[nLenReq + 1];
memset(pszwRes, 0, sizeof(wchar_t) * (nLenReq + 1));
MultiByteToWideChar(CP_ACP, 0, szRes, strlen(szRes), pszwRes, nLenReq);

MessageBox(pszwRes, _T("title"), MB_OKCANCEL | MB_ICONINFORMATION);
}

/************************************************************************/
/* Read Ini File(Unicode)                                               */
/************************************************************************/
void CMy07271Dlg::OnBnClickedButton3()
{
CFile file(_T("test_Unicode.ini"), CFile::modeRead);
wchar_t szBuf[64] = {0};
wchar_t szRes[1024] = {0};
int nBufLen = wcslen(szBuf);
int nResLen = wcslen(szRes);

while(1)
{
int nReadCount = file.Read(szBuf, 4);
if(nReadCount > 0)
{
wcscat(szRes, szBuf);
memset(szBuf, 0, sizeof(szBuf));
}
else
break;
}

MessageBox(szRes, _T("title"), MB_OKCANCEL | MB_ICONINFORMATION);
}

/************************************************************************/
/* Read Tex File(Unicode)                                               */
/************************************************************************/
void CMy07271Dlg::OnBnClickedButton4()
{
CFile file(_T("test_Unicode.ini"), CFile::modeRead);
wchar_t szBuf[64] = {0};
wchar_t szRes[1024] = {0};
int nBufLen = wcslen(szBuf);
int nResLen = wcslen(szRes);

while(1)
{
int nReadCount = file.Read(szBuf, 4);
if(nReadCount > 0)
{
wcscat(szRes, szBuf);
memset(szBuf, 0, sizeof(szBuf));

4000
}
else
break;
}

MessageBox(szRes, _T("title"), MB_OKCANCEL | MB_ICONINFORMATION);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unicode