특정 라이브러리를 사용하려고 하다보면 어쩔수없이 /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"
정리하자면,
- 기존 프로젝트는 PowerShell 명령어로 일괄변경
- 신규 프로젝트 또는 새로운 파일들을 만들때 매번 UTF-8로 인코딩하기는 번거로우니, ForceUTF-8 with BOM확장 프로그램을 사용해서 항상 UTF-8로 저장되도록 함.
- 신규 프로젝트 생성 시 rc 파일은 UTF-16 LE 인코딩이어야 하기 때문에 해당 파일만 인코딩 변경해줌
'김탱 개발자 > MFC' 카테고리의 다른 글
GDI 문자 자간(간격) 조정 (GDI+는 자간 조정 안됨) (0) | 2017.07.18 |
---|---|
Gdiplus 제한적 폰트 인식 (0) | 2017.07.07 |
CHttpFile의 GetLength 함수 (0) | 2017.03.23 |
다국어 지원 관련 함수들 (0) | 2016.06.30 |
간단하게 Excel 읽고 쓰기 (BasicExcel 사용) (0) | 2016.02.22 |