繁体   English   中英

CStdioFile 读取文件编码问题

[英]CStdioFile problems with encoding on read file

我无法使用 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 编码文件时,我得到了à èìòùáéÃóú

无论编码如何,我都希望我的函数适用于所有文件。

为什么我需要实施?

。编辑。

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

谢谢!

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

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

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

我没有遇到任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM