如何在C++中将文件编码格式设置为UTF8

Exa*_*Exa 5 c++ winapi utf-8 character-encoding

我的软件的要求是包含导出数据的文件的编码应为UTF8.但是当我将数据写入文件时,编码总是ANSI.(我使用Notepad ++来检查这个.)

我目前正在尝试通过读取文件,将其转换为UTF8并将文本写入新文件来手动转换文件.

linestd::string
inputFilestd::ifstream
pOutputFileFILE*

// ...

if( inputFile.is_open() )
{
    while( inputFile.good() )
    {
        getline(inputFile,line);

        //1
        DWORD dwCount = MultiByteToWideChar( CP_ACP, 0, line.c_str(), -1, NULL, 0 );
        wchar_t *pwcharText;
        pwcharText = new wchar_t[ dwCount];

        //2
        MultiByteToWideChar( CP_ACP, 0, line.c_str(), -1, pwcharText, dwCount );

        //3
        dwCount = WideCharToMultiByte( CP_UTF8, 0, pwcharText, -1, NULL, 0, NULL, NULL );
        char *pText;
        pText = new char[ dwCount ];

        //4
        WideCharToMultiByte( CP_UTF8, 0, pwcharText, -1, pText, dwCount, NULL, NULL );

        fprintf(pOutputFile,pText);
        fprintf(pOutputFile,"\n");

        delete[] pwcharText;
        delete[] pText;
    }
}

// ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,编码仍然是ANSI.我搜索了一段时间寻找解决方案,但我总是通过MultiByteToWideChar和WideCharToMultiByte遇到解决方案.但是,这似乎不起作用.我在这里错过了什么?

我也在这里寻找解决方案,但大多数UTF8问题涉及C#和php的东西.

SCh*_*rin 3

在 VC++2010 中的 Windows 上,可以使用本地化方面 std::codecvt_utf8_utf16 (即在 C++11 中)(据我所知,尚未在 GCC 中实现)。cppreference.com中的示例代码包含读/写 UTF-8 文件所需的所有基本信息。

std::wstring wFromFile = _T("teststring");
std::wofstream fileOut("textOut.txt");
fileOut.imbue(std::locale(fileOut.getloc(), new std::codecvt_utf8_utf16<wchar_t>));
fileOut<<wFromFile;
Run Code Online (Sandbox Code Playgroud)

它将 ANSI 编码文件设置为 UTF-8(在记事本中检查)。希望这是您所需要的。