본문 바로가기

김탱 개발자/MFC

MFC 프로젝트 UTF-8 인코딩으로 변경

특정 라이브러리를 사용하려고 하다보면 어쩔수없이 /utf-8 옵션을 켜서 utf-8로 빌드해야하는 경우가 발생한다.

 

그러나 MFC는 기본적으로 ANSI (CP949)로 저장되기 때문에 .cpp 나 .h파일들의 인코딩을 바꾸지 않으면 에러가 뜨면서 빌드되지 않는다.

 

따라서 기존 프로젝트들은 UTF-8로 인코딩을 해줘야하는 번거로움이 있다.

여러가지 방법을 시도했지만 Powershell로 일괄처리하는게 가장 깔끔하고 간편했다.

.cpp와 .h파일만 인코딩하는 이유는 이 파일들만 변경해도 빌드하는데 문제가 없었기 때문이다.

Get-ChildItem -File *.cpp,*.h | ForEach-Object {
   $content = Get-Content $_.FullName -Encoding Default
   $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $True
   [System.IO.File]::WriteAllLines($_.FullName, $content, $Utf8NoBomEncoding)
}

 

 

추가로 관련해서 찾다보면 Visual Studio 2015에서는 ForceUTF-8 with BOM 이라는 확장프로그램을 알게되는데,

앞으로 생성하는 프로젝트에 대해서는 UTF-8 with BOM으로 알아서 생성된다.

그런데 문제는 이 확장프로그램이 On 되어 있는 동안에는 Visual Studio 2015에서 생성하는 모든 파일을 UTF-8로 인코딩으로 저장해주다 보니 MFC 프로젝트에 있는 rc파일까지 UTF-8로 생성한다.

**주의 : rc파일은 UTF-8 로 생성하면 빌드가 안된다.
rc파일은 ANSI 또는 UTF-16 LE 로 인코딩되어 있어야 컴파일이 가능하다.

 

rc파일만 UTF-16 LE로 변환해주면 빌드하는데 문제가 없다.

Get-Content "MFCApplication.rc" | Set-Content -Encoding Unicode "MFCApplication.rc"

 

 

정리하자면,

  1. 기존 프로젝트는 PowerShell 명령어로 일괄변경
  2. 신규 프로젝트 또는 새로운 파일들을 만들때 매번 UTF-8로 인코딩하기는 번거로우니, ForceUTF-8 with BOM확장 프로그램을 사용해서 항상 UTF-8로 저장되도록 함.
  3. 신규 프로젝트 생성 시 rc 파일은 UTF-16 LE 인코딩이어야 하기 때문에 해당 파일만 인코딩 변경해줌