utf-8 BOM
간단한 팁 겸 정보 하나,
반나절을, 왜 잘 돌아가던 MQ broker가 특정 xml을 처리를 못할까하는 문제로 씨름을 했었습니다. 원인은 utf-8 BOM (byte-order mark) 였습니다.
xml 에디터로 그 파일을 열어보고는 원인을 찾지 못하다가, thunderbird에서 첨부된 그 xml을 보고서야 깨닫게 되었죠. thunderbird가 희한하게 3byte의 BOM을 특수문자로 보여주더군요. (그런후, 헥사에디터로 보니 확연해지더군요.)
그래서, 테스트 해 보았습니다.
thunderbird (특수 문자로 잘 보여 줍니다.)
firefox (보여주지 않습니다. ie 따라가느라고 xml 들여쓰기만 신경을 쓴 듯)
kongueror(아예 xml 태그도 보여주지 않습니다.)
emacs(박스 형태로 특수 문자가 있다는 것을 보여줍니다.)
vim(헥사값으로 보여주던데 신기하더군요.)
gedit,kwrite,notepad 모두 보여주지 안씁니다.
xmlspy(안 보여주는데 저장을 하면 BOM을 떼어버리고 저장을 하더군요.)
Byte order mark (BOM)The UCS character U+FEFF "ZERO WIDTH NO-BREAK SPACE" is also known
informally as "BYTE ORDER MARK" (abbreviated "BOM"). This character
can be used as a genuine "ZERO WIDTH NO-BREAK SPACE" within text, but
the BOM name hints at a second possible usage of the character: to
prepend a U+FEFF character to a stream of UCS characters as a
"signature". A receiver of such a serialized stream may then use the
initial character as a hint that the stream consists of UCS
characters and also to recognize which UCS encoding is involved and,
with encodings having a multi-octet encoding unit, as a way to
recognize the serialization order of the octets. UTF-8 having a
single-octet encoding unit, this last function is useless and the BOM
will always appear as the octet sequence EF BB BF.
bom은 utf16/32에만 보여지지 않나요? utf8에서는 안쓰는 걸로
bom은 utf16/32에만 보여지지 않나요? utf8에서는 안쓰는 걸로 아는데.
Written By the Black Knight of Destruction
UTF-8에는 BOM을 지정할 필요가 없습니다. :) 유니코드 BOM 문
UTF-8에는 BOM을 지정할 필요가 없습니다. :) 유니코드 BOM 문자이지요.
UTF-8은 Byte-Order를 지정할 필요가 없으니까요. 멀티바이트 유니코드 인코딩을 위해서 필요한 부분입니다.
이것때문에 한참 논란이 되었던 적이 있었던거 같은데, 자세한 내용은 잘 기억이 안나는군요. :-( UTF-8에도 BOM을 붙이라는건 MS 측에서 주장을 강하게 했던걸로 기억합니다. 그래서인지, 윈도우의 notepad는 UTF-8으로 저장을 할때 BOM을 꼭 붙입니다. 기타 대다수의 프로그램은 특별히 지정하지 않는한 붙이지 않는걸로 압니다.
위에서 인용한 부분의 조금 아래에 써있지만, UTF-8의 유니코드 BOM을 표시(display)할 때, 무시(ignore)하는걸 권장(RECOMMENDED)하고 있습니다. firefox의 동작은 표준대로 잘 돌아가는 것이고, IE 따라하기와는 관계가 없습니다.
*NIX 계열 편집기(vim,emacs 등)에서는, #! 으로 시작해야만 하는 쉘 스크립트 등을 지원하기 위해서 따로 표시를 하는 경우가 많습니다. (UNICODE FAQ에도 같은 내용이 쓰여져 있습니다)
추가: xml 파서는 UTF-8 문서라도, BOM이 붙어있을 경우를 처리할 수 있어야 합니다. 위 처리 예제 중에서는 xmlspy 식의 처리가 가장 적절한게 아닐까 싶네요.
댓글 달기