본문 바로가기
IT-개발,DB

[개발/vc++] 유니코드로 저장하기, UTF8로 저장하기

by SB리치퍼슨 2012. 1. 19.
[개발/vc++] 유니코드로 저장하기


// 첫 식별자가 파일의 처음 부분이 "FFFE" 값이다.
그리고 두바이트씩 문자크기를 갖는다.

TCHAR szPath[] = _T("12345");
int nlen = _tcslen(szPath);

CFile file (_T("D:\\test.xml"), CFile::modeCreate|CFile::modeWrite);

TCHAR szTmp[2];
WORD wd = 0xfeff;
memcpy(szTmp, &wd, 2);
file.Write(szTmp, 2);
file.Write(szPath, nlen * sizeof(TCHAR));
file.Close();

[개발/VC++] UTF-8로 저장하기

// 헤더가 3바이트이다. 문자는 3바이트씩 저장

// utf-8로 저장
int UnicodeToUtf8(TCHAR* pUnicode, char** pUtf8)
{
int len = ::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)pUnicode, -1, NULL, 0, NULL, NULL);
*pUtf8 = new char[len];
::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)pUnicode, -1, *pUtf8, len, NULL, NULL);

return len;
}

// UTF 0xEFBBBF
TCHAR szTmp[2];
WORD wd = 0xbbef;
memcpy(szTmp, &wd, 2);
file.Write(szTmp, 2);
BYTE byte = 0xbf;
memcpy(szTmp, &byte, 1);
file.Write(szTmp, 1);
char *pUtf8 = NULL;
nLen = UnicodeToUtf8(szXML, &pUtf8);
file.Write(pUtf8, nLen-1);
delete []pUtf8;

반응형

댓글