nobodj
No SG 운동

utf-8의 이해 December 19, 2017

utf-8, utf-16 모두 유니코드를 사용하는 인코딩방식이다.
유니코드는 숫자와 문자가 1:1매핑되어 있는 테이블로써, 문자를 2바이트로 기록한다.
이때, 문자는 영역별로 존재한다. 예) BMP Basic Multiligual Plane, SMP Supplementary Multilingual Plane등
한글은 BMP의 C000~CFFF에 있다.
위키피디아 유니코드:한글

유니코드 인코딩방식은 다시 말하면, 유니코드테이블상 숫자를 각각의 방식으로 이진수로 옮겨놓은 것이고,
UTF-8, UTF-16, UTF-32에 따라 이진수 표기법이 달라진다. 또 16,32방식은 Big-Endian이냐, Little-Endian이냐에 따라 달라진다.

참고 : EUC-KR(완성형)에서 발전한 CP949(통합완성형)은 자체적으로 고유테이블을 가지고 있으며, 한글을 2바이트로 표현한다.

예제) 리눅스
1. vi에디터에서 test파일생성.
2. 파일내용 : 안abcd녕
3. file -i test 파일확인
4. xxd뷰어로 내용확인(hex뷰어)
5. 안–> 유니코드 U+C548 –> 이진수 1100 0101 0100 1000
6. test파일 첫 3바이트(utf-8은 한글 3바이트표현) : ec9588 –> 이진수 1110 1100 1001 0101 1000 1000에 표현됨. 첫 1110은 1이 3개, 3바이트로 한글자를 표현하겠다는 의미.

nobodjs-iMac:Downloads nobodj$ vi test
nobodjs-iMac:Downloads nobodj$ file -i test

test: regular file
nobodjs-iMac:Downloads nobodj$ xxd test
0000000: ec95 8861 6263 64eb 8595 3f0a …abcd…?.

  1. UTF-8파일을 EUC-KR인코딩 방식으로 변경후 파일생성
  2. xxd뷰어로 내용확인 : bec8이 한글 ‘안’ EUC-KR 코드표

nobodjs-iMac:Downloads nobodj$ iconv -f utf-8 -t euckr test > test_euckr
nobodjs-iMac:Downloads nobodj$ xxd test_euckr

0000000: bec8 6162 6364 b3e7 3f0a ..abcd..?.

참고1 : http://norux.me/31
참고2 : utf-8과 utf-16의 차이 : http://pickykang.tistory.com/13

Categories Coding Digital Intox

Leave a Reply

Your email address will not be published. Required fields are marked *