對我的軟件的要求是,包含導出數據的文件的編碼應爲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