unicode 환경 컴파일 작업중 ansi 파일을 읽고 쓰는 부분을 unicode에서 읽고 쓰기가 되도록 수정 하다보니

검색해보면 대부분 BOM을 사용하는것으로 검색이 된다.


하지만 내가 필요한 내용은 BOM이 없는 파일에서 utf-8 포맷의 텍스트 파일을 읽는것이라서

다음과 같은 방식으로 수정을 했다.



CString strBuffer; // 실제 작업용 버퍼
CStringA szFileBuffer; // 파일에서 읽어들일 버퍼

CString strFilePath;
strFilePath = _T("test.txt");

CFile   hFile;
DWORD n;
if(hFile.Open(strFilePath,CFile::modeRead)){
    n = (DWORD)hFile.GetLength();
    n = hFile.Read(szFileBuffer.GetBuffer(n), n);
    szFileBuffer.ReleaseBuffer(n);
    hFile.Close();
}
// utf-8 파일 내용을 unicode로 변환
strBuffer = CA2T(szFileBuffer, CP_UTF8);

// 이후 로직 처리

//파일 저장
if(hFile.Open(strFilePath,CFile::modeCreate | CFile::modeWrite )){
    // unicode 문자열을 utf-8로 변환
    szFileBuffer = CT2A(strBuffer, CP_UTF8);
    sf.Write(szFileBuffer, szFileBuffer.GetLength());        
    hFile.Close();
}


unicode에서도 CFile 은 BOM 이 없으면 ansi 형식으로 데이터를 읽으므로 CStringA를 사용하도록 하는것이 핵심!!


'지식창고 > 프로그램' 카테고리의 다른 글

firefox Dns over HTTPS (DOH) 적용 하기  (0) 2018.05.17
nginx post 405 not allow 문제  (0) 2016.11.24
크롬 마우스 제스쳐 확장  (0) 2016.09.21
ConEmu 설정  (0) 2016.08.31
Laravel - 기본 라우팅  (0) 2015.05.19