C++如何生成utf-8編碼的文件

轉自http://blog.csdn.net/pizzq/article/details/4311194

習慣了java生成文件的方便,c++如何生成utf-8編碼的文件呢?
步驟如下:

1.首先要寫一個BOM頭。UTF-8文件一般是要這個頭的,當然也可以沒有。
2.將要生成的字符先使用寬字符格式生成,然後調用WideCharToMultiByte轉爲utf-8編碼,寫入文件。

例子如下:

  1. FILE*pFile=fopen("d://a.txt","w");

  2. charszBOM[4]={(char)0xEF,(char)0xBB,(char)0xBF,0};

  3. fprintf(pFile,"%s",szBOM);

  4. wchar_tchNum[11]=L"零壹貳叄肆伍陸柒捌玖";

  5. wchar_tchNum2[10]=L"億千百拾萬千百拾個";

  6. charsz[10]="112304823";

  7. wchar_tresult[32]=L"";

  8. intoffset=0;

  9. for(inti=0;i<strlen(sz);++i)

  10. {

  11. charc=sz[i];

  12. wchar_tw1=chNum[c-'0'];

  13. wchar_tw2=chNum2[i];

  14. swprintf(result+offset,L"%c%c",w1,w2);

  15. offset+=2;

  16. }

  17. charszChar[64]="";

  18. ::WideCharToMultiByte(CP_UTF8,0,result,wcslen(result),szChar,64,0,0);

  19. fprintf(pFile,"%s",szChar);

  20. fclose(pFile);

FILE * pFile = fopen("d://a.txt", "w"); char szBOM[4] = {(char)0xEF, (char)0xBB, (char)0xBF, 0}; fprintf(pFile, "%s", szBOM); wchar_t chNum[11] = L"零壹貳叄肆伍陸柒捌玖"; wchar_t chNum2[10] = L"億千百拾萬千百拾個"; char sz[10] = "112304823"; wchar_t result[32] = L""; int offset = 0; for(int i = 0; i < strlen(sz); ++ i) { char c = sz[i]; wchar_t w1 = chNum[ c - '0']; wchar_t w2 = chNum2[i]; swprintf(result + offset, L"%c%c", w1, w2); offset += 2; } char szChar[64] = ""; ::WideCharToMultiByte(CP_UTF8, 0, result, wcslen(result), szChar, 64, 0, 0); fprintf(pFile, "%s", szChar); fclose(pFile);

注意的是,當使用wchar_t而不再是char時,所有的字符串操作函數都需要時w系列的,例如wcslen、swprintf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章