BOM: Difference between revisions

From CS Wiki
(새 문서: '''Byte Order Mark''' '''유니코드 인코딩의 여러가지 방식에 대하여 어떤 인코딩 방식을 사용하고 있는지 구분하기 위해 문서의 가장 앞 부분...)
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
<br />
<br />


== 인코딩 방식에 따른 BOM 예시 ==
==인코딩 방식에 따른 BOM 예시==
{| class="wikitable"
{| class="wikitable"
!인코딩 방식
!인코딩 방식
Line 26: Line 26:
|}
|}


* ex) 문서 처음 2개의 바이트가 <code>FE FF</code>로 시작되면 그 문서는 UTF-16 Big Endian으로 해석
*ex) 문서 처음 2개의 바이트가 <code>FE FF</code>로 시작되면 그 문서는 UTF-16 Big Endian으로 해석


== UTF-8에서의 BOM ==
==UTF-8에서의 BOM==


=== 단일 BOM ===
===단일 BOM===
UTF-16, 32와 달리 UTF-8은 BOM이 한가지만 존재
UTF-16, 32와 달리 UTF-8은 BOM이 한가지만 존재


* 즉, BOM을 표기하지 않을 수 있음
*즉, BOM을 표기하지 않을 수 있음


=== UTF-8에서 발생하는 문제 ===
===UTF-8에서 발생하는 문제===


* 에디터에 따라서 BOM을 표기하기도, 표기하지 않기도 함
*에디터에 따라서 BOM을 표기하기도, 표기하지 않기도 함
* 외형상 동일하지만, 실제 내용엔 차이가 발생
*외형상 동일하지만, 실제 내용엔 차이가 발생
* 외형상 동일하지만, 실제 내용엔 차이가 발생
*외형상 동일하지만, 실제 내용엔 차이가 발생
* line by line으로 값을 읽거나, 전체에 대한 hash를 적용하는 경우 차이 발생
*line by line으로 값을 읽거나, 전체에 대한 hash를 적용하는 경우 차이 발생


{| class="wikitable"
{| class="wikitable"
Line 47: Line 47:
!BOM이 없는 경우
!BOM이 없는 경우
|-
|-
|[[파일:BOM이 있는 예시.png|섬네일]]
|[[파일:BOM이_있는_예시.png|대체글=|361x361픽셀]]
|[[파일:BOM이 없는 예시.png|섬네일]]
|[[파일:BOM이_없는_예시.png|대체글=|406x406픽셀]]
|}
|}


=== 대안 ===
===대안===
에디터의 설정을 통하여 BOM 삽입 여부 결정
에디터의 설정을 통하여 BOM 삽입 여부 결정


* 상호호환성을 위해 데이터 사용처의 수요에 맞추어 설정하는 것이 맞으나,
*상호호환성을 위해 데이터 사용처의 수요에 맞추어 설정하는 것이 맞으나,
* 수요가 확실치 않을 경우 일반적으로 UTF-8은 BOM 없이 사용하는 경우가 많음
*수요가 확실치 않을 경우 일반적으로 UTF-8은 BOM 없이 사용하는 경우가 많음
** BOM이 있는 경우 일부 소스코드 등에서 에러 발생
**BOM이 있는 경우 일부 소스코드 등에서 에러 발생
** UTF-8에서 BOM이 없다고 잘못 읽혀지는 경우는 없음
**UTF-8에서 BOM이 없다고 잘못 읽혀지는 경우는 없음


[[파일:UTF-8 BOM 설정 예시.png|왼쪽|섬네일]]
[[파일:UTF-8_BOM_설정_예시.png|대체글=]]
<br />
 
== 참고 문헌 ==
 
* [http://blog.wystan.net/2007/08/18/bom-byte-order-mark-problem UTF-8 인코딩에서의 BOM(Byte Order Mark) 문제]

Latest revision as of 01:15, 6 March 2020

Byte Order Mark

유니코드 인코딩의 여러가지 방식에 대하여 어떤 인코딩 방식을 사용하고 있는지 구분하기 위해 문서의 가장 앞 부분에 추가되는 짧은 식별 코드


인코딩 방식에 따른 BOM 예시[edit | edit source]

인코딩 방식 Byte Order Mark(BOM)
UTF-8 EF BB BF
UTF-16 Big Endian FE FF
UTF-16 Little Endian FF FE
UTF-32 Big Endian 00 00 FE FF
UTF-32 Little Endian FF FE 00 00
  • ex) 문서 처음 2개의 바이트가 FE FF로 시작되면 그 문서는 UTF-16 Big Endian으로 해석

UTF-8에서의 BOM[edit | edit source]

단일 BOM[edit | edit source]

UTF-16, 32와 달리 UTF-8은 BOM이 한가지만 존재

  • 즉, BOM을 표기하지 않을 수 있음

UTF-8에서 발생하는 문제[edit | edit source]

  • 에디터에 따라서 BOM을 표기하기도, 표기하지 않기도 함
  • 외형상 동일하지만, 실제 내용엔 차이가 발생
  • 외형상 동일하지만, 실제 내용엔 차이가 발생
  • line by line으로 값을 읽거나, 전체에 대한 hash를 적용하는 경우 차이 발생
일반 에디터로는 차이가 없으나, HEX에디터에서 확인할 수 있는 BOM 여부에 따른 차이
BOM이 있는 경우 BOM이 없는 경우
361x361픽셀 406x406픽셀

대안[edit | edit source]

에디터의 설정을 통하여 BOM 삽입 여부 결정

  • 상호호환성을 위해 데이터 사용처의 수요에 맞추어 설정하는 것이 맞으나,
  • 수요가 확실치 않을 경우 일반적으로 UTF-8은 BOM 없이 사용하는 경우가 많음
    • BOM이 있는 경우 일부 소스코드 등에서 에러 발생
    • UTF-8에서 BOM이 없다고 잘못 읽혀지는 경우는 없음

대체글=

참고 문헌[edit | edit source]