BOM (봄; Byte Order Mark)은 '바이트 순서 표시'입니다.

유니코드가, little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록, 유니코드 파일이 시작되는 첫부분에 보이지 않게, 2~3바이트의 문자열을 추가하는데 이것을 BOM이라고 합니다. 텍스트 에디터 화면에서는 보이지 않고, 헥사 에디터(Hex Editor)*로 열었을 때만 보입니다.



little-endian 의 BOM:
FF FE

big-endian 의 BOM:
FE FF

UTF-8 의 BOM:
EF BB BF



UTF-8에는 BOM이 없는 것이 보통인데, 오래된 프로그램은 BOM이 있는 UTF-8 파일에 오작동할 수 있습니다.

그렇지만 한국어 편집에서는 BOM이 있는 UTF-8이 더 좋습니다. 만약 'BOM이 없는 UTF-8 파일'에 영문과 숫자만 있고 한글이 없다면, 편집기가 그 파일을 유니코드가 아닌 일반 아스키 파일로 오인하기 때문입니다.

그런데 인터넷에 올릴 HTML/CSS/XML 파일을 UTF-8로 작성할 때에는 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이 없는 것으로 나옵니다.


출처 : Tong - ryu0423님의 MFC 일반통

Previous Post
한글 텍스트 문서를, 유니코드(Unicode / UTF-8) 로 변환하기일반 유니코드(Unicode)와 'UTF-8 유니코드'의 차이점, 차이[QnA] 울트라에디트(UltraEdit)에서 칼럼 편집모드 (Column Mode / B...[QnA] 사진 공유 사이트인 Flickr(플리커) 무료 계정의 크기/용량은?[독서] 문학을 찾아서 ― 도정일 (계간 문학동네 2000 년 가을호 대담)[도스박스/DOSBox] 윈도우XP에서, 고전게임 등 도스 프로그램 실행실시간 위성사진, 날씨 예보용 구름 사진: 케이웨더 기상 보기 주소GM 미디 (General MIDI) 128개의 악기 목록[QnA] 오르골(Orgel: Music Box) / 하프시코드(Harpsichord) /...미디(.mid) 파일은 무엇으로 편집합니까/만듭니까? + 무료 미디 편집 프로그램
'리틀 엔디안 little-endian 유니코드'와 '빅 엔디안 big-endian 유니코드'의 차이점
Saturday, May 20, 2006

MS윈도에서 내부적으로 사용되는 유니코드(UTF-16LE)는 16비트 즉 2바이트로 하나의 글자를 표현합니다. 바이트가 2개니까 이 바이트에 순서가 정해져 있어야 합니다. big-endian 은 있는 순서 그대로 바이트를 자연스럽게 나열하는 것이고, little-endian 은 속도를 빠르게 하기 위해서 거꾸로 나열하는 것입니다.

MS윈도의 유니코드는 리틀 엔디안 little-endian이 기본값입니다. 빅 엔디안 유니코드는, 울트라에디터 v11 등의 일부 프로그램에서 전혀 인식하지 못했습니다.


반면 UTF-8 에는 리틀 엔디안이나 빅 엔디안의 구분이 없습니다.

유니코드 중에서는 UTF-8 이 가장 무난했습니다. 그래서 저의 경우, 어떤 텍스트 파일을 유니코드로 저장해야 할 때는 모두 UTF-8 로 저장하고 있습니다.

http://mwultong.blogspot.com/2006/05/little-endian-big-endian.html


일반 유니코드(Unicode)와 'UTF-8 유니코드'의 차이점, 차이
Saturday, May 20, 2006

(1) 보통의 한국어 텍스트 문서: 이것은 아스키 문서이며 유니코드가 아닙니다. 영문/숫자/기호는 1바이트. 한글과 한자는 2바이트로 표현됩니다. euc-kr 또는 ksc_c_5601-1987 로 불리는 인코딩이며 웹페이지 작성에 사용할 수 있습니다. 특수한 외국어 문자나 일본식/중국식 한자는 표현할 수 없습니다.

다음의 2개가 유니코드입니다:

(2) 일반 유니코드(Unicode): 모든 글자를 2바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 인터넷에 HTML 파일로 올릴 수 없습니다. 즉 웹페이지 작성에 쓸 수 없습니다.

(3) UTF-8 유니코드: 영문/숫자/기호는 1바이트로, 한글과 한자 등은 3바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 웹페이지 작성에 쓸 수 있습니다. (저의 mwultong.blogspot.com 이 블로그도 UTF-8 로 되어 있습니다)



MS윈도우2000/XP 이상에서는, 외부적으로는 '일반 아스키 인코딩(1번)'을 사용하고, 내부적으로는 '일반 유니코드(2번)'를 사용합니다.

유닉스/리눅스/오픈소스 진영에서는 (1)번 또는 'UTF-8 유니코드(3번)'를 기본으로 사용합니다.

그렇지만 윈도 메모장에서도 UTF-8 유니코드 문서를 읽고 저장할 수는 있습니다.



http://mwultong.blogspot.com/2006/05/unicode-utf-8.html
풀다운 메뉴의
        File/
        Save As(다른 이름으로 저장)/
에서 나온 대화상자에서

Encoding(인코딩)을 Unicode 나 UTF-8 로 지정한 후 "저장" 버튼을 누릅니다.





(윈도우에 기본으로 설치되어 있는) 메모장을 사용해 변환


풀다운 메뉴의
        파일/
        다른 이름으로 저장/
에서 나온 대화상자에서

"인코딩"을 "유니코드"나 "UTF-8"로 지정합니다. 특별한 이유가 없는 이상, "유니코드 (big endian)"은 선택하지 마세요.





울트라에디트(UltraEdit)를 사용해 변환:


풀다운 메뉴의
        File/
        Conversions(변환)/
에서

ASCII To Unicode : 현재 한글 문서를 유니코드로 변환

ASCII To UTF-8 (Unicode Editing) : 현재 한글 문서를 유니코드(UTF-8)로 변환



일반 아스키 텍스트 파일을 유니코드로 변환할 때에는 또는 그 반대로 변환할 때에는, 이엠에디터(EmEditor)로 변환하는 것이 가장 안정적입니다. 울트라에디터의 경우에는 버그가 있어서 글자들이 깨지는 경우가 많습니다.


http://mwultong.blogspot.com/2006/05/unicode-utf-8_20.html