1,写入数据
最开始是在写入数据前先写入三个字节
BYTE btHead[] = {
0xEF,0xBB,0xBF };
::WriteFile(hFile, btHead, 3, &dwWrite, 0);
::WriteFile(hFile, str, lstrlen(str)*sizeof(TCHAR), &dwWrite, 0);
这样写入后文件样式为:
格式是UTF-8,但后面有个BOM,而且汉字也是乱码,
最后我又测试了下用c语言写入UTF-8数据,
//打开文件,按指定编码格式打开
FILE* fp=fopen("UTF_8Test.txt", "wt+,ccs=UTF-8");
//写入数据
TCHAR str[] = TEXT("测试文件,1234,abcd,ABCD");
fwrite(str, sizeof(TCHAR), lstrlen(str), fp);
//关闭
fclose(fp);
汉字不是乱码了,但是格式仍然是UTF-8 BOM
这就是不我想要的效果。
最后查找一翻资料后,
1。先把要保存的字符串转化为UTF-8格式的char字符串
2。在写入char字符串到文件中
//lpBuffer是传来的宽字符串的指针
//nBufferLeng是字符串的字符个数(用lstrlen求出的长度)
//求字符串转为UTF-8的字符长度
int size = ::WideCharToMultiByte(CP_UTF8, 0, (LPTSTR)lpBuffer, nBufferLeng, NULL, 0, NULL,
NULL);
//再转为char字符串
char* pTem = new char[size+1];
memset(pTem, 0, size);
::WideCharToMultiByte(CP_UTF8, 0, (LPTSTR)lpBuffer, nBufferLeng, pTem, size, nullptr, nullptr);
pTem[size] = '\0';
//最后写入char字符串
bResult = ::WriteFile(m_hFile, pTem, size, &dwWrite, 0