对话框程序,在对话框模板上放置了一个CListBox列表框,通过APPWINZARD添加了一个变量m_ListBox,在BOOL CMyDictDlg::OnInitDialog()函数中添加下面代码:CStdioFIle myData;
myData.Open(_T"test.txt",CStdioFile::modeRead);
CString temp;
while(myData.ReadString(temp))
{
  m_ListBox.AddString((LPCTSTR)temp);
}编译通过运行,然后问题来了,如果test.txt文件是GBK编码的话,程序能正确识别并且显示,但如果test.txt是UNICODE编码的话,显示出来的却是乱码或者空白,工程属性了我已经设置了UNICODE属性的,步骤是在网上看的,原来缺少MFC42UD库,也已经下了,在工程属性中,预编译处理项,添加了_UNICODE,删除了原来的_MBCS,在“连接”页的“output”分类的程序接入点中,也添加了wWinMainCRTStartup,编译通过!可是还是识别不了读进的UNICODE文本(Unicode文本已经将标志0xFFFE修改掉),GBK文本的则没有问题!
我用的VC6.0中文版!

解决方案 »

  1.   

    你的txt是unicode什么编码 , utf-8? 还是utf-16? 这个最好 还是自己再转换下。
      

  2.   

    工程里设置的编码只是说你的win32 api,mfc使用的字符串的编码方式,你的文件的编码还是要你自己转的,转成现在工程里使用的编码方式就行了
      

  3.   

    // VC6下读取Unicode文件显示到ListBox中
    try
    {
    CFile file;
    file.Open(_T("F:\\12.txt"), CFile::modeRead);
    DWORD size = file.GetLength();
    wchar_t* buf = new wchar_t[size+1];
    memset(buf, 0, sizeof(wchar_t)*(size+1));
    file.Seek(2, CFile::begin);
    file.Read(buf, size);
    file.Close();

    wchar_t seps[] = L"\r\n";
    wchar_t* tmp = buf;
    wchar_t* token = wcstok(tmp, seps);
    while(NULL != token)
    {
    m_listbox.AddString(CString(token)); token = wcstok(NULL, seps);
    }
    //AfxMessageBox(CString(buf));
    delete[] buf;
    buf = NULL;
    }
    catch (CException* e)
    {
    e->ReportError();
    e->Delete();
    }
      

  4.   


    程序中的UNICODE 是2字节的...
      

  5.   

    请问5楼的VisualEleven,为什么while循环中,token = wcstok(NULL,seps)语句为什么要用NULL呢?是更新字符串定位还是什么的?看不太懂这句的意思,这个语句返回的是不是NULL结果呢?
      

  6.   

    大概明白了token = wcstok(NULL, seps)语句的意思,MSDN文档中这样描述:Each call modifies strToken by substituting a NULL character for each delimiter that is encountered.每次查找后,将查到的分隔符用NULL字符替换,而这个语句是不是就是讲,从NULL指针向后查找,直到遇到分隔符,返回NULL指针到分隔符seps间的字符串指针呢?