对我的软件的要求是,包含导出数据的文件的编码应为UTF8。但是当我将数据写入文件时,编码始终是ANSI。 (我用记事本+ +进行检查。)如何在C++中将文件编码格式设置为UTF8
目前我在做什么是试图文件通过阅读它,将其转换为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的东西。
如果你只写英文字符的文件,记事本+ +是在显示ANSI正确的,而且文件也将是UTF-8作为其ANSI/ASCII编码的所有英文字母UTF-8的有效子集。 – RedX 2012-07-25 09:15:06
该文件将是一个包含英文字母,数字和一些特殊字符('/',';',':',',','。','(',')')的CSV文件。 – Exa 2012-07-25 09:19:55
你的编译器是否支持[std :: codecvt_utf8](http://en.cppreference.com/w/cpp/locale/codecvt_utf8)? – 2012-07-25 09:21:41