BOM(Byte Order Mark)

UTF-8, UTF-16, UTF-32 등의 문서를 읽어 들일 때는 BOM(Byte Order Mark) 을 주의하자.


관련 글


BOM

Unicode 가 다양한 문자셋의 호환을 위해 만들어진 매치 테이블로 이루어진 것이라고 ‘다양한 문자 코드‘ 라는 글에서 알아보았다. 그리고 Unicode 의 대표적인 방식으로 UTF-8, UTF-16 등 이 있다고도 말했다. 이러한 UTF-8, UTF-16, UTF-32 등의 방식들은 BOM(Byte Order Mark) 라고 하는 식별자가 문서 앞에 들어가 있다. 이러한 BOM 으로 어떤 문서인지 구분이 가능하다. 아래의 표는 인코딩 방식에 대응하는 BOM 을 타나낸 표이다.

인코딩 방식 Endian 종류 BOM
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

문서를 헥스에디터 같은 것으로 열어보면 가장 앞에 위의 BOM 이 있을 것이고, 이것을 기준으로 문서를 식별할 수 있다는 것이다. 주목해야 할 부분은 Endian 구분이 있는 경우, FE FF 또는 FF FE 가 있지만 Endian 구분이 없는 UTF-8 은 BOM 이 EF BB BF 로 시작한다는 것이다.

BOM 을 주의해야 하는 이유

그렇다면 BOM 을 왜 주의해야 할 까? 이유는 어떤 프로그램에서 문서를 읽어 들여야 할 때, BOM 때문에 제대로 된 환성된 형식의 글로 읽어 들이지 못하기 때문이다. 아래의 이미지는 실제 문서를 HxD 에디터로 열어본 것이다.K-349EF BB BF 코드 때문에 읽어 들인 데이터가 X 로 시작하지 못하기 때문에 제대로 된 데이터를 읽어 들인 것이 아니게 된다. 하지만 아래의 이미지는 EF BB BF 코드가 없기 때문에 실제로 필요한 데이터를 얻을 수 있게 된다.K-350

해결 방법

해결 방법은 간단하다. 애초에 문서를 저장할 때, BOM 코드가 안들어가게 설정해서 저장을 하면 된다. 하지만 개발자 입장에서 처리한다면, 문서를 일단 읽어 들여 BOM 패턴이 있는지 확인하여 BOM 을 빼고 읽어 들이면 된다.

“잘못된 내용이 있다면 주저말고 지적해 주세요. 저의 발전에 많은 도움이 됩니다.”

sungjun noh

Reply