보통 일반적으로 접하게 되는 문서는 ASCII 혹은 UTF8 문서 이다.
다만 문서중 UTF8 의 경우 일반 UTF8, UTF8 (BOM) 문서가 있다.
UTF8 (BOM)의 경우 윈도우 메모장에서 UTF8문서를 생성할 경우 파일의 첫부분에 삽입되게 되며 “EF BB BF” 값을 가진다.
또란 실제 삽입되어 있지만 메모장으로 파일을 불러들였을때에는 보이지 않도록 처리가 되어 있다.
즉 있는지 없는지 확인이 안되고 오류를 발생시키기 때문에 문제가 된다.
아래 처럼 utf8 에서는 ea b0 80 = “가” 을 나타낸다.
1 2 3 4 5 |
~]# echo $LANG en_US.UTF-8 ~]# echo -n '가' | xxd 0000000: eab0 80 ... |
일반 ASCII 파일 혹은 일반(리눅스에서 생성한) UTF8 문서를 확인해보면 아래와 같다. # = 23 | 가 = ea b0 80 | \n(엔터) = 0a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
~]# file test.txt test.txt: UTF-8 Unicode text ~]# xxd test.txt 0000000: 2323 2323 2323 2323 2323 2323 2323 2323 ################ 0000010: 2323 2323 2323 2323 2323 2323 2323 2323 ################ 0000020: eab0 800a .... ~]# file test2.txt test2.txt: ASCII text ~]# xxd test2.txt 0000000: 2323 2323 2323 2323 2323 2323 2323 2323 ################ 0000010: 2323 2323 2323 2323 2323 2323 2323 2323 ################ 0000020: 0a . |
윈도우 메모장으로 생성\하여 BOM 이 삽입된 파일은 다음과 같다. utf8(bom) = ef bb bf | \r\n(윈도우엔터) = 0d 0a
1 2 3 4 5 6 7 |
~]# file test3.txt test3.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators ~]# xxd test3.txt 0000000: efbb bf23 2323 2323 2323 2323 2323 2323 ...############# 0000010: 2323 2323 2323 2323 2323 2323 2323 2323 ################ 0000020: 2323 230d 0a ###.. |
위와 같은 이유로 윈도우에 mysql 을 설치 하고 메모장으로 my.ini 파일을 수정한뒤에 저장 하면 UTF-8(BOM) 으로 저장 되어 mysql 서비스 시작이 되지 않는다.
메모장으로 하더라도 “다른 이름으로 저장” 시 인코딩을 ANSI 으로 설정하고 저장 기존 파일명과 같게 저장 하는 방법이 있다. (근데 사람은 같은 실수를 반복하기 때문에…)
윈도우 내에서의 문서 작업은 메모장이 아닌 BOM 없이 생성 가능한 에디터를 사용하는 습관을 들여야 할것 같다 ‘ㅅ’a
무료 툴 : AcroEDIT
PS. UTF16 의 경우 UTF16BE , UTF16LE 두가지 형식이 존재하며 두가지 모두 Byte Order Mark 를 가지고 있다. 아래표 참조 ‘ㅅ’a
Byte Order Mark | 문자 길이 | HEX 코드 ( # ) | HEX 코드 ( 가 ) | HEX 코드 ( 핣 ) |
|
---|---|---|---|---|---|
UTF16BE | FE FF | 4 Byte | 23 00 | AC 00 | D8 A9 |
UTF16LE | FF FE | 4 Byte | 00 23 | AC 00 | D8 A9 |
UTF8(BOM) | EF BB BF | 1 ~ 3 Byte | 23 | EA B0 80 | ED 95 A3 |
UTF8 | - | 1 ~ 3 Byte | 23 | EA B0 80 | ED 95 A3 |
ASCII | 1 Byte | 23 | 표현 불가 | ||
UTF32BE | FE FF 00 00 | 8 Byte | 23 00 00 00 | AC 00 00 00 | D8 A9 00 00 |
UTF32LE | 00 00 FF FE | 8 Byte | 00 00 00 23 | 00 00 AC 00 | 00 00 D8 A9 |