我的软件的一个要求是包含导出数据的文件的编码应为 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;
}
}
// ...
不幸的是,编码仍然是 ANSI。我搜索了一段时间的解决方案,但我总是通过 MultiByteToWideChar 和 WideCharToMultiByte 遇到解决方案。但是,这似乎不起作用。我在这里想念什么?
我也在这里寻找解决方案,但大多数 UTF8 问题都涉及 C# 和 php 的东西。