在读取文件上编码的cstdiofile问题

CStdioFile problems with encoding on read file

本文关键字:cstdiofile 问题 编码 读取 文件      更新时间:2023-10-16

我无法使用cstdiofile正确读取文件。

我打开Notepad.exe,我输入àèìòùáéíóú,然后保存两次,一旦将编码设置为ANSI(真的是CP-1252(,而其他为UTF-8

然后,我尝试通过以下代码块从MFC读取它

BOOL ReadAllFileContent(const CString &FilePath, CString *fileContent)
{
    CString sLine;
    BOOL isSuccess = false;
    CStdioFile input;
    isSuccess = input.Open(FilePath, CFile::modeRead);
    if (isSuccess) {
        while (input.ReadString(sLine)) {
            fileContent->Append(sLine);
        }
        input.Close();
    }
    return isSuccess;
}

当我调用它时,使用ANSI文件,我得到了预期的结果àèìòùáéíóú但是,当我尝试阅读UTF8编码文件时,我有à èìòùáéíóú

我希望我的函数与所有文件一起使用,无论编码如何。

为什么我需要实施?

.edit。

  • 不幸的是,在真实的应用程序中,文件来自外部应用程序,因此更改文件编码不是一个选项。我必须能够读取UTF-8和CP-1252文件。
  • 任何文件都是有效的ANSI,Notepad告诉ANSI是真正的Windows-1252编码。
  • 我已经根据此处提供的示例找到了一种读取UTF-8CP-1252的方法。尽管它有效,但我需要传递我不提前知道的文件。

thnks!

我亲自使用此处宣传的类:

https://www.codeproject.com/articles/7958/ctextfiledocument

它在读取和编写各种各种口味的各种编码的文本文件中都有很好的支持。

我没有问题。