본문 바로가기

Programming/Win32&MFC&COM

BOM(Byte Order Mark)에 따른 파일 처리

반응형

Byte Order Mark(BOM)은 바이트 순서 표식이라고 합니다.

유니코드 형식(엔디안, 인코딩 방식 등)을 지정하는 일종의 헤더입니다.

일반적으로 유니코드가 아닌 경우 BOM이 필요하지 않습니다.

하지만 유니코드의 경우는 BOM이 필요할 수 있습니다.

Windows가 사용하는 UTF-16 방식의 경우 U+FEFF를 BOM으로 사용합니다.

인텔 등이 사용하는 일반 PC의 x86 환경에서는 리틀 엔디안을 따르기 때문에 FF FE로 기록이 됩니다.

MFC 등에서 유니코드로 파일을 기록할 때는 먼저 0xFEFF를 바이너리 형태로 입력해야 합니다.

이렇게 작성된 파일은 나중에 다시 읽을 때 BOM을 통해서 어떻게 읽는지 알 수 있습니다.

UTF-16 외에 각 유니코드 인코딩 방식에 따른 BOM은 다음과 같습니다.

Encoding

Representation

UTF-8

EF BB BF

UTF-16 Big Endian

FE FF

UTF-16 Little Endian

FF FE

UTF-32 Big Endian

00 00 FE FF

UTF-32 Little Endian

FF FE 00 00

SCSU

0E FE FF

UTF-EBCDIC 

DD 73 66 73

BOCU-1 

FB EE 28

빅 엔디안과 리틀 엔디안의 순서는 완전히 반대입니다.

UTF-8은 동일하게 사용이 가능합니다.

일반적으로 유닉스 계열에서 UTF-8은 BOM을 사용하지 않는다고 합니다.

Windows에서 개발을 진행할 때 유니코드 문서에는 0xFEFF를 추가하고 내용을 기록하면 됩니다.

기록한 이후에 메모장 등을 통해서 정상적으로 출력되는지 확인하면 됩니다.

더 정확하게는 UltraEdit와 같이 Hex Editor 기능이 제공되는 에디터로 확인하면 됩니다.

반응형