0

我使用 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";
            }

        }
4

2 回答 2

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()`.
于 2012-07-17T06:09:13.597 回答
1

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

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

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

于 2012-07-17T06:55:22.783 回答