如何检查文本文件原始编码VC ++或MFC

时间:2012-07-17 04:41:33

标签: visual-c++ mfc

我使用CStdioFile读取文本文件,输出是字符串 但是我想在对话框中选择文件时检查原始编码文件 如何查看原始编码?

//这是我的代码

if(dlg.DoModal() == IDOK)
{

    path = dlg.GetPathName(); //get file path
    CStdioFile pStdioFile1(path, CFile::modeRead);  
    char buff[BUFSIZ];

    while(!feof(pStdioFile1.m_pStream))
        {

            pStdioFile1.ReadString(Buff); //Buff is read text to string  
            msg += Buff;

            if(!feof(pStdioFile1.m_pStream))
            {
                msg += "\n";
            }

        }

2 个答案:

答案 0 :(得分:1)

你做不到。在某些情况下,数据将包含所使用的编码的指示,但您无法真正依赖它。 Windows确实提供IstextUnicode来猜测某些文本是否是unicode(在这种情况下意味着UTF-16),但是1)它只对Unicode有利,2)结果只是猜测

顺便说一下,我对你将整个文件读成字符串的代码感到兴奋。假设文件预计相当小,我通常使用类似的东西:

std::ifstream in(dlg.GetPathName());
std::stringstream buffer;
buffer << in.rdbuf();

// now the content of the file is availble as `buffer.str()`.

答案 1 :(得分:1)

检查文件的BOM(字节顺序标记)(参见http://en.wikipedia.org/wiki/Byte_order_mark)。

如果文件不包含BOM,则假定它是8位ANSI文件。

否则,BOM表示文件的格式。检查链接,它包含一个很好的表格,其中包含不同的BOM及其含义。