轉自http://blog.csdn.net/zaffix/article/details/7217701
爲實現用C語言寫UTF-8編碼的文件,測試了以下兩種情況。
第一種情況,爲fopen指定一個編碼,然後寫入wchar_t字符串,最終寫入的文件就是UTF-8編碼的了,原理不清楚,估計是fwrite時對wchar_t做了編碼轉換(如果寫入char的話就會亂碼)。
#include<stdio.h>
#include<tchar.h>
intmain()
{
FILE*fp=fopen("test.txt","wt+,ccs=UTF-8");
wchar_t*s=_T("hello,你好!");
fwrite(s,sizeof(wchar_t),wcslen(s),fp);
fclose(fp);
return0;
}
#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格式的,然後再寫入。
#include<stdio.h>
#include<string.h>
#include<Windows.h>
intmain()
{
FILE*fp=fopen("test.txt","wb+");
//寫入UTF-8的BOM文件頭
charheader[3]={(char)0xEF,(char)0xBB,(char)0xBF};
fwrite(header,sizeof(char),3,fp);
char*s="hello,你好!";
wchar_twc[256];
//將ANSI編碼的多字節字符串轉換成寬字符字符串
intn=MultiByteToWideChar(CP_ACP,0,s,strlen(s),wc,256);
if(n>0)
{
wc[n]=0;
charmb[1024];
//將寬字符字符串轉換成UTF-8編碼的多字節字符串
n=WideCharToMultiByte(CP_UTF8,0,wc,wcslen(wc),mb,1024,NULL,NULL);
if(n>0)
{
mb[n]=0;
fwrite(mb,sizeof(char),strlen(mb),fp);
}
}
fclose(fp);
return0;
}