ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니코드&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
Designed by Tistory.