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
AND