c++如何生成utf-8编码的文件呢?
步骤如下:
1.首先要写一个BOM头。UTF-8文件一般是要这个头的,当然也可以没有。
2.将要生成的字符先使用宽字符格式生成,然后调用WideCharToMultiByte转为utf-8编码,写入文件。
例子如下:
[cpp]viewplaincopyprint
FILE*pFile=fopen("d://a.txt","w");
charszBOM ={(char)0xEF,(char)0xBB,(char)0xBF,0};
fprintf(pFile,"%s",szBOM);
wchar_tchNum[11]=L"零壹贰叁肆伍陆柒捌玖";
wchar_tchNum2 =L"亿千百拾万千百拾个";
charsz ="112304823";
wchar_tresult[32]=L"";
intoffset=0;
for(inti=0;i<strlen(sz);++i)
{
charc=sz[i];
wchar_tw1=chNum[c-'0'];
wchar_tw2=chNum2[i];
swprintf(result+offset,L"%c%c",w1,w2);
offset+=2;
}
charszChar[64]="";
::WideCharToMultiByte(CP_UTF8,0,result,wcslen(result),szChar,64,0,0);
fprintf(pFile,"%s",szChar);
fclose(pFile);
FILE * pFile = fopen("d://a.txt", "w");
char szBOM = {(char)0xEF, (char)0xBB, (char)0xBF, 0};
fprintf(pFile, "%s", szBOM);
wchar_t chNum[11] = L"零壹贰叁肆伍陆柒捌玖";
wchar_t chNum2 = L"亿千百拾万千百拾个";
char sz = "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