바이트 순서 표식
위키백과 ― 우리 모두의 백과사전.
유니코드 |
---|
부호화 형식 |
UCS |
양방향 텍스트 |
BOM |
한중일 통합 한자 |
유니코드 범위 목록 |
유니코드와 HTML |
유니코드와 전자 우편 |
유니코드 글꼴 |
바이트 순서 표식(Byte Order Mark, BOM)은 유니코드에서 엔디안을 구별하기 위해 사용되는 문자로, 문자 값은 U+FEFF이다.
UTF-16, UTF-32와 같은 인코딩에서는 엔디안의 종류에 따라 문자열의 값이 완전히 달라지므로, 문자열의 엔디안을 구별할 수 있는 표식이 필요하다. 이에 따라 유니코드 문자열 앞에 BOM 문자를 붙여, 맨 처음에 읽히는 값에 따라 엔디안을 구별한다.
예를 들어, UTF-16에서 빅 엔디안의 경우에 문자열의 가장 처음 두 바이트는 FE FF가 된다. 리틀 엔디안의 경우에는 FF FE가 된다.
UTF-8에는 엔디안 문제가 일어나지 않으므로 BOM을 붙여야 할 필요는 없지만, 해당 자료가 UTF-8 인코딩이라는 표식으로 사용하는 경우도 있다. 특히 마이크로소프트 윈도의 많은 문서 편집기는 UTF-8로 저장할 경우 자동으로 문서의 가장 앞부분에 BOM을 추가한다. 이와는 반대로 유닉스 계열의 문서 편집기는 BOM을 사용하지 않는 경우가 보통으로, 이 경우 문서의 BOM을 잘못 인식하여 문제가 발생할 수도 있다. 예를 들어, PHP 인터프리터에서는 BOM을 인식하지 못하고 일반 문자열로 간주하는데, PHP에서 HTTP 헤더를 변경하려면 그 시점에서 어떠한 문자열도 출력해서는 안 된다(php.net 도움말). 하지만 문서에 BOM이 있으면 문자열 출력이 일어나고, 따라서 헤더를 변경할 수 없다는 경고가 발생하게 된다.
[편집] BOM 표
각 유니코드 인코딩 방법에 따른 BOM 값은 다음과 같다.
Encoding | Representation |
---|---|
UTF-8 | EF BB BF |
UTF-16 빅 엔디안 | FE FF |
UTF-16 리틀 엔디안 | FF FE |
UTF-32 빅 엔디안 | 00 00 FE FF |
UTF-32 리틀 엔디안 | FF FE 00 00 |
SCSU | 0E FE FF |
UTF-EBCDIC | DD 73 66 73 |
BOCU-1 | FB EE 28 |