从文本文件中读入一行数据到Cstring中。
用AfxMessageBox显示的是乱码。下面循环用mid()取得的字符,数字可以正常显示,但是文字却是乱码。
将取得的Cstring写到一个新的文本文件中,文件是正确的。请问这是什么原因?CString tmp;CStdioFile fin2( _T("C:\\abc.txt"), CFile::modeRead );
fin2.ReadString(tmp);
fin2.Close();AfxMessageBox(tmp);for (int i = 0; i<tmp.GetLength(); i++)
{
CString substr;
substr = tmp.Mid(i,1);
AfxMessageBox(substr);
}

解决方案 »

  1.   

    读不用CString 要用char *
      

  2.   

    数字是单字节字符,汉字是双字节字符,
    取汉字的时候你用substr = tmp.Mid(i,1);每次只取一个字节,也就是半个汉字,所以会出现乱码。建议你使用Unicode字符集!
      

  3.   

    当然,你的数字和英文是ASCALL码,是单字节的;而汉语文字是双字节的。把汉字的双字节格式强制用你的tmp.Mid(i,1)一次读一个字节,自然会是乱码
      

  4.   

    当然,你的数字和英文是ASCALL码,是单字节的;而汉语文字是双字节的。把汉字的双字节格式强制用你的tmp.Mid(i,1)一次读一个字节,自然会是乱码
      

  5.   

    AfxMessageBox((LPCTSTR)temp);试试循环用mid()取得的字符,数字可以正常显示,但是文字却是乱码
    --这很正常,数字只有一个字节,读出来正常,汉字是两个字节,一个字节一个字节的读没有意义,当然是乱码
      

  6.   

    for (int i = 0; i<tmp.GetLength(); i++)
    {
    CString substr;
    substr = tmp.Mid(i,1);
    AfxMessageBox(substr);
    }
    问题出在substr = tmp.Mid(i,1);,可以加个判断碰到汉字取,asc码小于零,Mid(i,2);