유니코드 문서의 Byte Order Mark

보통 일반적으로 접하게 되는 문서는 ASCII 혹은 UTF8 문서 이다.

다만 문서중 UTF8 의 경우 일반 UTF8, UTF8 (BOM) 문서가 있다.

 

UTF8 (BOM)의 경우 윈도우 메모장에서 UTF8문서를 생성할 경우 파일의 첫부분에 삽입되게 되며 “EF BB BF” 값을 가진다.

또란 실제 삽입되어 있지만 메모장으로 파일을 불러들였을때에는 보이지 않도록 처리가 되어 있다.

 

즉 있는지 없는지 확인이 안되고 오류를 발생시키기 때문에 문제가 된다.

 

아래 처럼 utf8 에서는 ea b0 80 = “가” 을 나타낸다.

 

일반 ASCII 파일 혹은 일반(리눅스에서 생성한) UTF8 문서를 확인해보면 아래와 같다. # = 23 | 가 = ea b0 80 | \n(엔터) = 0a

 

윈도우 메모장으로 생성\하여 BOM 이 삽입된 파일은 다음과 같다.  utf8(bom) = ef bb bf | \r\n(윈도우엔터) = 0d 0a

 

위와 같은 이유로 윈도우에 mysql 을 설치 하고 메모장으로 my.ini 파일을 수정한뒤에 저장 하면 UTF-8(BOM) 으로 저장 되어 mysql 서비스 시작이 되지 않는다.

메모장으로 하더라도 “다른 이름으로 저장” 시 인코딩을 ANSI 으로 설정하고 저장 기존 파일명과 같게 저장 하는 방법이 있다. (근데 사람은 같은 실수를 반복하기 때문에…)

2021-01-14_113358

윈도우 내에서의 문서 작업은 메모장이 아닌 BOM 없이 생성 가능한 에디터를 사용하는 습관을 들여야 할것 같다 ‘ㅅ’a

무료 툴 : AcroEDIT

 

PS. UTF16 의 경우 UTF16BE , UTF16LE 두가지 형식이 존재하며 두가지 모두 Byte Order Mark 를 가지고 있다. 아래표 참조 ‘ㅅ’a

Byte
Order
Mark
문자 길이HEX 코드
( # )
HEX 코드
( 가 )
HEX 코드
( 핣 )
UTF16BEFE FF4 Byte23 00AC 00D8 A9
UTF16LEFF FE4 Byte00 23AC 00D8 A9
UTF8(BOM)EF BB BF1 ~ 3 Byte23EA B0 80ED 95 A3
UTF8-1 ~ 3 Byte23EA B0 80ED 95 A3
ASCII1 Byte23표현 불가
UTF32BEFE FF 00 008 Byte23 00 00 00AC 00 00 00D8 A9 00 00
UTF32LE00 00 FF FE8 Byte00 00 00 2300 00 AC 0000 00 D8 A9