如何使用C++或C创建UTF-8文件
就例如一个基本的文本文件
可以吗?
[解决办法]
如果是Windows平台,可以用以下代码:
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>
int _tmain(int argc,TCHAR *argv[])
{
TCHAR szContent[] = _T( "UTF-8文件内容 ");
BYTE szUTF8[100]={0};
DWORD dwError,dwWrite;
int size;
HANDLE hFile;
size = WideCharToMultiByte(CP_UTF8,0,szContent,-1,szUTF8,sizeof(szUTF8),NULL,NULL);
if (0 == size)
{
dwError = GetLastError();
_tprintf(_T( "转换错误: %u\n "),dwError);
return 0;
}
hFile = CreateFile(_T( "c:\\utf8.txt "),GENERIC_WRITE,FILE_SHARE_READ,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (INVALID_HANDLE_VALUE == hFile)
_tprintf(_T( "打开文件失败\n "));
WriteFile(hFile,szUTF8,size,&dwWrite,NULL);
CloseHandle(hFile);
return 0;
}
[解决办法]
一般的UTF8会比普通的ANSI文件多出前面的三个字节,用以指明文件所用的编码是UTF8的,除去这三个字节外,其余的部分都是UTF8编码的字节就可以了。有时,前面的三字节也可以不指定,很多文本编辑器能够自动探测出使用了UTF8编码,当然,也有会出错的时候,呵呵。
Windows平台上,对于ANSI的文本
1.使用MultiByteToWideChar(CP_ACP,....)转成UTF16,
2.再用WideCharToMultiByte(CP_UTF8,......)将UTF16编码转成UTF8字节
3.写文件,先写入0xEF,0xBB,0xBF三个字节,然后将转换成UTF8编码的字节写入文件,就OK了。
如果是UTF16的文本,省去步骤一