2011. 8. 6. 02:39
Visual C++ 10은 기본적으로 ASCII 인코딩으로 파일을 만든다. (VC#은 기본적으로 유니코드 파일로 생성된다는거 같다)

근데 이게 git와 함께 쓰이면 gitweb 등에서 한글이 깨져보이는 현상이 발생하는데 이는 gitweb이 UTF-8 인코딩을 기본 인코딩으로 보여주기때문이다.

이를 위해 소스파일들의 인코딩을 변경해줘야되는데 메뉴의 File -> Advanced Save Options에서 Encoding을 UTF-8로 변경해야하는 번거로움을 감수해야한다.

그만좀 보고싶다.


프로그래머의 힘은 자동화다. 언제까지 이 노가다를 할텐가?
자동화 방법은 다음과 같다.

매크로 에디터에 들어가 EnviromentEvents에서 코드 맨 윗부분의 Module들을 Imports 하는 부분에
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics '여기까지 기존 모듈
Imports System.IO 
위와 같이 System.IO 모듈을 포함시키고 Automatically generated code, do not modify 다음에 다음 코드를 붙여넣고 저장한다.

Sub MakeUTF8File(ByVal path As String)
    Dim input As New FileStream(path, FileMode.Open)

    'Check BOM
    Dim isUTF8 As Boolean = (input.ReadByte = &HEF And input.ReadByte = &HBB And input.ReadByte = &HBF)
    input.Close()

    If (Not isUTF8) Then
        Dim s As String
        s = File.ReadAllText(path, System.Text.Encoding.Default)
        File.WriteAllText(path, s, System.Text.Encoding.UTF8)
    End If
End Sub

Public Sub DocumentEvents_DocumentSaved(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved
    Dim path As String = Document.FullName
    MakeUTF8File(path)
End Sub

'이 핸들러는 왠만하면 빼는게 좋다. 라이브러리 파일들을 디버깅 차원에서 열때 자동으로 바꿔버리면 조금 곤란할듯
Public Sub DocumentEvents_DocumentOpening(ByVal path As String, ByVal flag As Boolean) Handles DocumentEvents.DocumentOpening
    MakeUTF8File(path)
End Sub 
이제 다음과 같은 상황에서 파일이 UTF-8 인코딩으로 자동변환이 된다.

1. 파일을 열때
2. 파일을 생성 (생성할때 자동으로 열리니까)
3. 파일을 저장할때

이제 UTF-8 BOM과 함께하는(?) 코딩을 하면 된다.

추가내용1: 
@waan26
님이 알려주신 새파일 생성시 UTF-8을 적용하는 좀 더 좋은 방법이 있다. (C++ Class 생성에는 안먹힌다)
위 방법을 사용시 새 파일을 생성하면 파일 변환이 변환됬다는 메세지 박스가 무조건 뜨게 되는데 (파일 로딩 후에 변환을 시도하는거 같다)
새 파일 생성시 무조건 UTF-8 파일을 생성하는 좀 더 깔끔한 해법으로 다음과 같은 방법이 있다.

1. Visual Studio 설치된 위치(보통 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojectitems)에 간다.
2. hfile.h, newc++file.cpp 과 같은 템플릿 파일의 인코딩을 UTF-8로 변경한다
3. 그 뒤로는 항상 UTF-8 파일이 생성된다.

추가내용2:  클래스 템플릿을 따로 만드는 방법도 있다. 이건 좀 있다가 해보고 적어야지 [...]

P.S. 그건 그렇고 코드를 이쁘게 보여줘야되는데.. ( --) 
Posted by envi