用C語言寫UTF-8編碼的文件

轉自http://blog.csdn.net/zaffix/article/details/7217701

爲實現用C語言寫UTF-8編碼的文件,測試了以下兩種情況。

第一種情況,爲fopen指定一個編碼,然後寫入wchar_t字符串,最終寫入的文件就是UTF-8編碼的了,原理不清楚,估計是fwrite時對wchar_t做了編碼轉換(如果寫入char的話就會亂碼)。

  1. #include<stdio.h>

  2. #include<tchar.h>

  3. intmain()

  4. {

  5. FILE*fp=fopen("test.txt","wt+,ccs=UTF-8");

  6. wchar_t*s=_T("hello,你好!");

  7. fwrite(s,sizeof(wchar_t),wcslen(s),fp);

  8. fclose(fp);

  9. return0;

  10. }

#include <stdio.h>
#include <tchar.h>

int main()
{
	FILE* fp = fopen("test.txt", "wt+,ccs=UTF-8");

	wchar_t* s = _T("hello, 你好!");

	fwrite(s, sizeof(wchar_t), wcslen(s), fp);

	fclose(fp);

	return 0;
}


第二種情況,先將字符串編碼轉換爲UTF-8格式的,然後再寫入。

  1. #include<stdio.h>

  2. #include<string.h>

  3. #include<Windows.h>

  4. intmain()

  5. {

  6. FILE*fp=fopen("test.txt","wb+");

  7. //寫入UTF-8的BOM文件頭

  8. charheader[3]={(char)0xEF,(char)0xBB,(char)0xBF};

  9. fwrite(header,sizeof(char),3,fp);

  10. char*s="hello,你好!";

  11. wchar_twc[256];

  12. //將ANSI編碼的多字節字符串轉換成寬字符字符串

  13. intn=MultiByteToWideChar(CP_ACP,0,s,strlen(s),wc,256);

  14. if(n>0)

  15. {

  16. wc[n]=0;

  17. charmb[1024];

  18. //將寬字符字符串轉換成UTF-8編碼的多字節字符串

  19. n=WideCharToMultiByte(CP_UTF8,0,wc,wcslen(wc),mb,1024,NULL,NULL);

  20. if(n>0)

  21. {

  22. mb[n]=0;

  23. fwrite(mb,sizeof(char),strlen(mb),fp);

  24. }

  25. }

  26. fclose(fp);

  27. return0;

  28. }

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