ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니코드 BOM(Byte Order Mark)
    공부 2016. 10. 12. 15:02

    BOM이란

    BOM이란 문서 맨 앞에 눈에 보이지 않는 특정 바이트(byte)를 넣은 다음 이것을 해석해서 정확히 어떤 인코딩 방식이 사용되었는지 알아내는 방법을 나타냅니다. 자세하게 유니코드가 little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록, 유니코드 파일이 시작되는 첫부분에 보이지 않게, 2~3바이트의 문자열을 추가하는데 이것을 BOM이라고 합니다. BOM은 텍스트 에디터 화면에서는 보이지 않고, 헥사 에디터(Hex Editor)*로 열었을 때만 보입니다.

    BOM의 종류

    인코딩 방식Byte Order Mark(BOM)
    UTF-8EF BB BF
    UTF-16 Big EndianFE FF
    UTF-16 Little EndianFF FE
    UTF-32 Big Endian00 00 FE FF
    UTF-32 Little EndianFF FE 00 00

    UTF-16 이상 인코딩일 때, 문서의 맨 처음 BOM을 파악하여 Big Endian인지 Little Endian인지 구분하지만 UTF-8의 경우는 BOM이 하나로 고정입니다. 그래서 이 BOM은 바이트 순서와(Byte Order) 상관없기 때문에 UTF-8 Signature라고 불리기도 합니다. 즉, 해당 문서가 UTF-8로 인코딩되었다는 사실을 알리는 사인(signature)입니다.

    BOM 문제점

    UTF-8에는 BOM이 없는 것이 보통인데(UTF-8은 BOM이 고정이라 인코딩 방식을 자동으로 알 수 있음), 일부 윈도우즈 프로그램(메모장 같은)은 UTF-8 파일을 생성할 때 자동으로 BOM을 집어넣습니다. 윈도우즈 환경에서는 눈에 띄지 않는 경우가 많지만 리눅스(LINUX)나 유닉스(UNIX) 환경에서는 많은 문제를 일으키는 원인이 됩니다. BOM이 추가된 데이터의 경우, 글자 앞에 빈칸이 생기면 그 차이점을 알 수 있지만 대개 눈으론 보이지 않습니다.

    데이터베이스에서 BOM이 추가된 데이터와 그렇지 않은 데이터를 비교할 경우 눈으로는 동일한 데이터지만 비교를 할 땐 같지 않다는 데이터로 나옵니다. 그 이유는 문자열 앞에 BOM이 붙어있기 때문입니다. (이 문제때문에 하루를 고생한적이..)


    울트라에디트라는 프로그램을 울트라에디트의 헥사 모드(Ctrl+H)로 UTF-8 파일을 보면, 16비트 유니코드처럼 보이고 BOM이 있든 없든 항상 FF FE 라는 엉뚱한 BOM이 나타납니다. 이것은 울트라에디터가 유니코드를 편집할 때, 내부적으로 '16비트 little-endian 유니코드 (UTF-16LE)'로 변환하여 편집하기 때문입니다. 진짜 헥사 에디터로 보아야만 UTF-8의 BOM인 EF BB BF 가 제대로 보이게 됩니다. 물론 BOM이 없는 UTF-8이라면 BOM이 없는 것으로 나옵니다

    해결책

    가장 좋은 방법으로는 메모장 같은 프로그램보단 BOM설정이 가능한 프로그램을 사용하는 것입니다. 하지만 모든 파일을 BOM설정이 가능한 프로그램을 사용할 수 없기 때문에 BOM파일을 받은 다음, 코드로 해당 파일을 UTF-8로 인코딩 처리하는 부분도 생각해야 합니다.

    댓글