Wednesday, August 29, 2007
UTF-8 BOM, UTF-16LE BOM, UTF-16BE BOM 출력 화면
각종 유니코드 인코딩의 파일에서 BOM 즉 "Byte Order Mark"를 출력한 화면입니다. test.txt 라는 이름의 텍스트 파일을 대문자 A로만 가득채운 후에, BOM(봄)을 붙여서 서로 다른 종류의 유니코드 인코딩으로 저장하고, 헥사뷰어로 덤프한 결과입니다. (파일 끝에는 0D 0A 라는 "도스 개행문자"가 붙어 있는데 이 포스트의 주제와는 직접적인 상관은 없습니다.)
"UTF-8 유니코드"에는 BOM이 없는 것이 보통입니다. 특히 HTML용 UTF-8 파일에는 BOM이 없어야 합니다. 다만 BOM이 없으면, 파일에 한글이 아닌 영문자만 기입되어 있을 경우, "일반 8비트 ANSI 인코딩"과 절대 구분이 되지 않는 문제가 있습니다.
아무튼 아래의 첫 3문자인 EF BB BF 가, UTF-8의 "봄"입니다. 참고로, "41"은 알파벳 대문자 A의 16진수 아스키 코드입니다.
MS윈도우에서 사용되는 16비트 유니코드 (little-endian)의 봄은 FF FE 라는 2문자입니다.
윈도우에서는 BE 즉 big-endian 유니코드는 사실상 사용되지 않습니다. 위의 LE 유니코드와는 바이트 순서가 거꾸로 되어 있습니다. 정확하게 말하자면 LE의 바이트 순서가 역순이고, BE의 바이트 순서는 바로 되어 있습니다.
▶▶ [QnA] 유니코드 (Unicode) 의 BOM (Byte Order Mark) 이란?
▶▶ '리틀 엔디안 little-endian 유니코드'와 '빅 엔디안 big-endian 유니코드'의 차이점
Perl로 헥사 뷰어 만들기 소스: ▶▶ Perl 펄] 헥사 뷰어, 헥사 덤프 만들기 소스 코드; Hex Viewer, File Dump
UTF-8의 BOM 출력: EF BB BF
"UTF-8 유니코드"에는 BOM이 없는 것이 보통입니다. 특히 HTML용 UTF-8 파일에는 BOM이 없어야 합니다. 다만 BOM이 없으면, 파일에 한글이 아닌 영문자만 기입되어 있을 경우, "일반 8비트 ANSI 인코딩"과 절대 구분이 되지 않는 문제가 있습니다.
아무튼 아래의 첫 3문자인 EF BB BF 가, UTF-8의 "봄"입니다. 참고로, "41"은 알파벳 대문자 A의 16진수 아스키 코드입니다.
D:\Z>hexdump.pl test.txt
00000000: EF BB BF 41 41 41 41 41 41 41 41 41 41 41 41 41 ...AAAAAAAAAAAAA
00000010: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000020: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000030: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000040: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000050: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000060: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000070: 41 41 41 41 41 41 41 0D 0A AAAAAAA..
D:\Z>
00000000: EF BB BF 41 41 41 41 41 41 41 41 41 41 41 41 41 ...AAAAAAAAAAAAA
00000010: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000020: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000030: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000040: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000050: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000060: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
00000070: 41 41 41 41 41 41 41 0D 0A AAAAAAA..
D:\Z>
일반 유니코드(UTF-16LE)의 BOM: FF FE
MS윈도우에서 사용되는 16비트 유니코드 (little-endian)의 봄은 FF FE 라는 2문자입니다.
D:\Z>hexdump.pl test.txt
00000000: FF FE 41 00 41 00 41 00 41 00 41 00 41 00 41 00 ..A.A.A.A.A.A.A.
00000010: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000020: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000030: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000040: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000050: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000060: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000070: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000080: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000090: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000A0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000B0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000C0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000D0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000E0: 41 00 41 00 41 00 41 00 41 00 0D 00 0A 00 A.A.A.A.A.....
D:\Z>
00000000: FF FE 41 00 41 00 41 00 41 00 41 00 41 00 41 00 ..A.A.A.A.A.A.A.
00000010: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000020: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000030: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000040: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000050: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000060: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000070: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000080: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
00000090: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000A0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000B0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000C0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000D0: 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 A.A.A.A.A.A.A.A.
000000E0: 41 00 41 00 41 00 41 00 41 00 0D 00 0A 00 A.A.A.A.A.....
D:\Z>
UTF-16BE의 BOM: FE FF
윈도우에서는 BE 즉 big-endian 유니코드는 사실상 사용되지 않습니다. 위의 LE 유니코드와는 바이트 순서가 거꾸로 되어 있습니다. 정확하게 말하자면 LE의 바이트 순서가 역순이고, BE의 바이트 순서는 바로 되어 있습니다.
D:\Z>hexdump.pl test.txt
00000000: FE FF 00 41 00 41 00 41 00 41 00 41 00 41 00 41 ...A.A.A.A.A.A.A
00000010: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000020: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000030: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000040: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000050: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000060: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000070: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000080: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000090: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000A0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000B0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000C0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000D0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000E0: 00 41 00 41 00 41 00 41 00 41 00 0D 00 0A .A.A.A.A.A....
D:\Z>
00000000: FE FF 00 41 00 41 00 41 00 41 00 41 00 41 00 41 ...A.A.A.A.A.A.A
00000010: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000020: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000030: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000040: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000050: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000060: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000070: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000080: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
00000090: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000A0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000B0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000C0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000D0: 00 41 00 41 00 41 00 41 00 41 00 41 00 41 00 41 .A.A.A.A.A.A.A.A
000000E0: 00 41 00 41 00 41 00 41 00 41 00 0D 00 0A .A.A.A.A.A....
D:\Z>
▶▶ [QnA] 유니코드 (Unicode) 의 BOM (Byte Order Mark) 이란?
▶▶ '리틀 엔디안 little-endian 유니코드'와 '빅 엔디안 big-endian 유니코드'의 차이점
Perl로 헥사 뷰어 만들기 소스: ▶▶ Perl 펄] 헥사 뷰어, 헥사 덤프 만들기 소스 코드; Hex Viewer, File Dump
tag: html
HTML | CSS | 자바스크립트 JavaScript
tag: editor
텍스트 에디터 | 문서 편집기 | Text Editor
<< Home