标题:关于MFC使用 Unicode 字符集出现乱码的问题!!
只看楼主
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:0 
按二进制读取文件前两字节,判断是否是0xff,0xfe。如是就按UNICODE文本处理。否则按ASCII文本处理。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-08 16:46
ozc2701
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2010-5-14
得分:0 
这个判断该怎么加呢????
2010-08-08 17:13
ozc2701
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2010-5-14
得分:0 
    CFileDialog fileDlg(TRUE);
    fileDlg.m_ofn.lpstrTitle=TEXT("打开文件");
    fileDlg.m_ofn.lpstrFilter=TEXT("文本文件(*.txt)\0*.txt\0\0");
    if(IDOK==fileDlg.DoModal())
    {
        m_Text.Empty();
        CFile ReadF(fileDlg.GetPathName(),CFile::modeRead);
        TCHAR* temp=new TCHAR[ReadF.GetLength()/2+1];
        ReadF.Read(temp,ReadF.GetLength());
        temp[ReadF.GetLength()/2]=0;
        ReadF.Close();
        if (temp[0]==0xFEFF)
        {
            m_Text=temp;
            delete temp;
        }
        else
        {
            CFile ReadF(fileDlg.GetPathName(),CFile::modeRead);
            char* temp=new char[ReadF.GetLength()+1];
            ReadF.Read(temp,ReadF.GetLength());
            temp[ReadF.GetLength()]=0;
            ReadF.Close();
            m_Text=temp;
            delete temp;
        }
        UpdateData(FALSE);
    }




写完了。。。正常了。。。
代码可能有啰嗦的地方。。
望指出缺点。
2010-08-08 17:27
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:20 
以下是引用ozc2701在2010-8-8 17:27:28的发言:

    CFileDialog fileDlg(TRUE);
    fileDlg.m_ofn.lpstrTitle=TEXT("打开文件");
    fileDlg.m_ofn.lpstrFilter=TEXT("文本文件(*.txt)\0*.txt\0\0");
    if(IDOK==fileDlg.DoModal())
    {
        m_Text.Empty();
        CFile ReadF(fileDlg.GetPathName(),CFile::modeRead);
        TCHAR* temp=new TCHAR[ReadF.GetLength()/2+1];
        ReadF.Read(temp,ReadF.GetLength());
        temp[ReadF.GetLength()/2]=0;
        ReadF.Close();
        if (temp[0]==0xFEFF)
        {
            m_Text=temp;
            delete temp;
        }
        else
        {
            CFile ReadF(fileDlg.GetPathName(),CFile::modeRead);
            char* temp=new char[ReadF.GetLength()+1];
            ReadF.Read(temp,ReadF.GetLength());
            temp[ReadF.GetLength()]=0;
            ReadF.Close();
            m_Text=temp;
            delete temp;
        }
        UpdateData(FALSE);
    }




写完了。。。正常了。。。
代码可能有啰嗦的地方。。
望指出缺点。
   很好,自己完成的才有成就感。
   你可以试着一次读取文件。然后根据文件头来做不同的处理。而不用分两次。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-08 18:12
yunlongdell
Rank: 1
来 自:内蒙古大学
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-4-21
得分:0 
把编程的环境更换成Unicode环境,在工程里的设置C++的预处理编译定义框中加_UNICODE在连接选项卡中更改输出的入口点,换成wWinMainCRTStartup
然后就开始Unicode编程    相关的字符函数都将变化。有点麻烦。

好的艺术家复制,伟大的艺术家偷窃!
2011-05-20 11:34
jianghuai_j
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-7-11
得分:0 
小端机,mfc读取Unicode(be)文件显示在edit control是乱码,如果正常显示怎么解决
2014-07-11 10:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-315093-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.155189 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved