在读取文件

时间:2018-02-06 16:19:34

标签: c++ visual-c++ unicode file-io mfc

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

我打开notepad.exe,输入àèìòùáéíóú并保存两次,一旦我将编码设置为ANSI(真的是CP-1252),其他设置为UTF-8。< / p>

然后我尝试使用以下代码块从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,记事本告诉ANSI的是Windows-1252编码。
  • 根据提供的示例here,我找到了一种正确阅读UTF-8CP-1252的方法。虽然它有效,但我需要通过我事先不知道的文件编码。

Thnks!

1 个答案:

答案 0 :(得分:2)

我个人使用这里所宣传的课程:

https://www.codeproject.com/Articles/7958/CTextFileDocument

它非常支持读取和编写各种编码的文本文件,包括各种风格的unicode。

我没有遇到任何问题。