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 헤더를 파일 앞에 써 놓았다. 'IT > C/C++' 카테고리의 다른 글
|