Exa*_*Exa 5 c++ winapi utf-8 character-encoding
我的软件的要求是包含导出数据的文件的编码应为UTF8.但是当我将数据写入文件时,编码总是ANSI.(我使用Notepad ++来检查这个.)
我目前正在尝试通过读取文件,将其转换为UTF8并将文本写入新文件来手动转换文件.
line是std::string
inputFile是std::ifstream
pOutputFile是FILE*
// ...
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的东西.
在 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(在记事本中检查)。希望这是您所需要的。