-
유니코드&UTF8 텍스트를 파일로 저장하기IT/C/C++ 2009. 3. 6. 20:41
Unicode 형식 및 UTF8 형식의 텍스트로 저장하는 방법
CFile p;
CString tempStr;
CString FileName=_T("C:\\Download.log");
p.Open(FileName, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate);
p.SeekToEnd();
TCHAR szTmp[2];
WORD wd = 0xfeff;
memcpy(szTmp, &wd, 2);
p.Write(szTmp, 2);
p.Write(m_sUrl, m_sUrl.GetLength()*sizeof(TCHAR) );
p.Write(_T("\n"),1*sizeof(TCHAR));
p.Close();
여기서 핵심은 FEFF 이다.
유니코드의 식별자란 것인데, 파일의 처음부분에 넣어주면 유니코드라고 선언하는 셈이 된다.
(원래 규격은 FFFE 일것이지만, IBM PC 는 리틀엔디언 방식이므로 바이트 위치를 반대로 두어야 한다.)
//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;UTF-8 도 마찬가지로 헤더를 조작하는데, 이번엔 3바이트짜리 0xEFBBBF 헤더를 파일 앞에 써 놓았다.
UTF-8 도 마찬가지로 헤더를 조작하는데, 이번엔 3바이트짜리 0xEFBBBF 헤더를 파일 앞에 써 놓았다.
출처 : http://sonbosun.tistory.com/7'IT > C/C++' 카테고리의 다른 글
MultiByteToWideChar 사용법 (0) 2009.03.20 범위지정연산자의 용도 (4) 2009.03.09 MBCS 와 UNICODE FAQ 정리 (0) 2009.03.04 CFileDialgog 를 이용한 파일 열기 및 저장 (0) 2009.02.18 트레이 아이콘 처리하기 (0) 2008.12.17