2011년 2월 22일 화요일

[Vim] ucs-bom, BOM(Byte Order Mark)

Vim의 설정에서 fencs=ucs-bom,utf-8,cp949 이런 식으로 설정하는 것을 가끔 본 적이 있는데 제일 앞의 ucs-bom 이게 뭔지 모르고 왠지 꺼름칙해서 지금까지 써 본 적이 없는 설정 단어이다.

그런데 갑자기 궁금해져서 ucs-bom에 대해 찾아보니 BOM에 의해 자동으로 인코딩을 설정해 주는 설정이라고 한다. 헐 이렇게 친절한 녀석이었을 줄이야. (무식함에 울고 싶다...)

그렇다면 BOM이란...

http://en.wikipedia.org/wiki/Byte_Order_Mark

Byte Order Mark라는 이름에서 보이듯이, 문자의 바이트 정렬 순서에 대한 마크이다. 쉽게 말하자면 '인코딩을 문서에 직접 설정하기 위한 규약'이다.

컴퓨터에서 일반적인 최소단위는 바이트이며, 영어권에서 발명(?)된 컴퓨터의 특징 상 바이트 단위는 문자를 표시하기에 적합한 단위이다. 하지만 한글이나 한자 등은 바이트 단위로 표현할 수가 없어서 멀티바이트(2바이트 이상) 문자를 사용해야 한다. 그런데 국가 간에 코드가 겹칠 수도 있고 바이너리 데이터 인지 텍스트 인지 자칫 구분할 수도 없다. 그래서 유니코드와 인코드 타입이 제정되긴 했지만 여러모로 현실적으로 문제를 자주 일으키고 있기도 하다.

하여간, BOM은 유니코드의 인코딩 타입을 문서 서두(header)에 남겨서 자동으로 인코딩을 판단할 수 있도록 하기 위한 정보다. 예를 들어 UTF-8의 경우 0xefbbbf 의 3바이트를 기록한다.

BOM은 문서 자체에는 아무런 영향을 끼치지 않는다. 실제로 BOM을 지원하는 에디터는 BOM이 기록된 문서를 열 때 BOM을 읽어서 확인한 후 실제 문서에서 BOM을 지워서 표시한다. 물론 저장할 때는 다시 BOM을 기록한다.

Vim에서는 적당히 이렇게 설정해 두고 쓰면 될 것 같다. 이러면 기본 인코딩은 UTF-8이 되고, 왠만한 한글 파일을 읽을 때는 인코딩을 알아서 결정해서 읽어들일 것 같다.

set fenc=uf-8
set fencs=ucs-bom,utf-8,cp949,euc-kr

댓글 없음 :