[문자인코딩] 유니코드, UTF-8, UTF-16, UTF-32 간단 정리 Application DarkKaiser, 2009년 9월 27일2023년 9월 6일 출처 : http://ggaman.com/tt/896 유니코드란? unicode는 모든 문자에 index를 줘 놓은 것이다. 더 이상도 아니고, 더 이하도 아니다.이 index를 code point라고 부르는데, 그냥 index라고 칭하도록 하자. ‘A’라는 글자는 0x0041 이라는 index를 가진다.‘a’라는 글자는 0x0061 이라는 index를 가진다.‘가’라는 글자는 0xac00 이라는 index를 가진다.( 더 많은 글자와 index를 보려면 http://www.unicode.org/charts/ 를 참고하자 ) 표현방법 저렇게 정해져 있는 index를 표시하는 방법에는 UTF와 UCS두가지 종류가 있다.( UTF – Unicode Transformation Format , UCS – Universal Character Set ) UCSUCS는 몇바이트로 index를 표현할 수 있느냐를 나타낸다.즉 UCS-2는 2byte로 index를 나타낼꺼고 UCS-4는 4byte를 이용해서 index를 나타낼거라는거다. UTFUTF는 몇 비트단위로사용해서 index를 나타낼것인가를 말한다.UTF-8은 8bit씩 늘려가며 index를 나타낼꺼라는거고,UTF-16은 16bit씩 index를 나타낼꺼고, UTF-32는 32bit씩 index를 나타낼꺼라는거다.( 실상 UTF-16과 UCS-2는 같다고 볼 수 있다. 마찬가지로 UTF-32와 UCS-4도 마찬가지다. ) UTF-16 원래 처음에 unicode의 index는 2byte로 나타낼 수 있었다.그랬는데, unicode 가 버젼업되어 4.0이 나왔을때에는 0x10FFFF 까지의 index가 생겼다. 처음에는 UTF-16으로 모든 문자를 나타낼 수 있었으나,( 2byte로 표현할 수 있는 index를 가진 문자 목록을 BMP Basic Multilingual Plane 라고 부른다. )유니코드 4.0이 나오면서, 2byte로는 0x10FFFF 같은 값을 가리킬 수 없게 되었다. 그래서 UTF-16으로는 BMP에 있는 문자들은 2byte로 처리하고,BMP보다 더 높은 index를 가지는 놈들은 4byte로 처리 한다.문자 index 0x0000 부터 0xFFFF 까지는 2byte로 처리 하고문자 index 0x10000 부터 0x1FFFF 까지는 4byte로 처리 된다. UTF-32 UTF-32는 기본적으로 4byte를 사용하기 때문에, 위와 같은 짓을 하지 않아도 된다. UTF-8 영어권에 있는 사람들은 UTF-16을 쓰면 손해다.모든 영어는 1byte만 있으면 256개를 표현할 수 있으므로, 모든 문자를 넣을 수 있기 때문이다. 그래서 나온게 UTF-8이다.영어권은 1byte로 표현하고, 그것보다 높은 index를 가지는것은 2byte 혹은 3byte 혹은 4byte ..요렇게 늘려 가면서 쓰도록 되어 있다. 서로간의 변환 UTF-8, UTF-16, UTF-32, UCS-2, UCS-4 는모두 unicode의 문자 index를 나타내기 위한 방법이기 때문에,서로간의 변환은 당연히 잘 된다. 글자처리 우리가 글자 “가”를 쓴다고 해 보자. 글자 “가”는 1글자이다.그러므로 “가”를 나타내는 index가 있다. 물론 “나”를 나타내는 index도 있다. 한글로 표현할 수 있는 글자는 매우 많다.그 많은 글자 모두에게 index를 줄 수가 없다. 현재 사용하고 있는 모든 글자에 index를 준다고 해도,시간이 지나서 새로운 글자가 추가 되어 index가 모자르게 된다면 어떻게 할것인가? 그래서 유니코드는 완전한 글자를 제공해 주기도 하지만,글자를 조립할 수 있도록 조립가능한 글자를 제공해 준다. 다시 “가”를 쓴다고 해 보다.“가”라는 글자는 1개이지만, 실제로는 초성 “ㄱ”과 중성”ㅏ” 가 합쳐져서 만들어진 글자이다. 그러므로 “가”를 표현하는 방법은 완성된 글자 “가”0xAC00가 될 수도 있고,초성”ㄱ”과 중성”ㅏ”를 조립한 “가”0x1100,0x1161 로 나타낼 수도 있다.( 초성 “ㄱ”은 0x1100 – HANGUL CHOSEONG KIYEOK )( 중성 “ㅏ”는 0x1161 – HANGUL JUNGSEON A ) 이를 조합할 수 있게 해 주는 index는 1100 부터 있다.( Hangul Jamo – Korean combining alphabet – http://www.unicode.org/charts/PDF/U1100.pdf ) 이는 비단 한글뿐만 아니라,일본어 역시 완성된 글자가 있기도 하고, 조합할 수 있게도 되어 있다. 영어 역시 그렇다. 영어에서 무슨 글자를 조합하냐 라고 말하겠지만,이력서를 나타내는 Résumé 의 경우에는 e 와 ‘ 의 조합으로 이루어 질 수도 있다. 개발++