본문 바로가기

프로그래밍

유니코드(Unicode)와 UTF와의 관계

1. 개요

  • 사전적 정의[참고 : 네이버 지식백과]


  세계 모든 나라의 언어를 통일된 방법으로 표현할 수 있게 제안된 국제적인 코드 규약. 미국 애플 컴퓨터 사나 마이크로소프트사, IBM 사, 썬 마이크로시스템즈 사, 노벨 사 등 운영 체제를 직접 다루는 미국 기업이 중심이 되어 설립한 유니코드 컨소시엄이 제창했다. 1993년에는 IOS의 표준(ISO/IEC10646)으로 되었다. 

유럽 문자권에서는 30자 안팎의 알파벳과 몇 가지 특수 글자를 표현하기에는 한 바이트로 충분하였기 때문에 모든 정보가 한 바이트의 낱말로 표현하고 있다. 하지만 한글, 한자 또는 일본 가나 등과 같은 글자는 그 구조가 영어와 달라서 하나의 바이트는 표현이 불가능하기 때문에 일반적으로 두 바이트를 조합하여 하나의 글자를 표현하고 있다. 이러한 문제점을 해결하고 세계 각국의 글자에 대응할 수 있도록 유니코드가 등장했다. 본질적으로 유니코드에서는 16비트를 사용하여 하나의 글자로 표현하고 있다. 

유니코드에서는 일부의 예외를 제외한 모든 글자를 두 바이트로 취급하기 때문에 이 코드를 사용한 경우 로마글 프로그램을 한글, 일어, 중국어 등 두 바이트 글자로 변환하는 데 드는 비용과 노력을 절감할 수 있다. 그러나 데이터의 용량이 늘어나므로 컴퓨터 안에서 문서 표현이나 처리보다는 주로 문서 교환이나 통신 등의 분야에서 사용되고 있다. 유니코드 2.0에서 한글의 경우 현대의 표현 가능한 모든 한글 11,172자의 코드 값은 0xAC00-0xD7A3이고, 한글 자모 글자 240개(옛 한글 자소 포함) 의 코드 값은 0x1100-0x11F9이다. 자모 글자 코드로 풀어쓰기를 하면 옛 한글의 표현도 가능하고 채움(fill) 글자를 이용하여 일부 자모가 빈 글자의 표현이 가능하기도 하다

 

  • UTF[참고 : 데브기어]


 UTF(Unicode TRANSFORMATION FORMAT)와 유니코드의 관계

    참고문서 :  Marco_Cantu_Delphi_and_Unicode_kor.pdf


  유니코드를 이해하기 어렵게 하는 것은 실제 저장소 또는 물리적 바이트라는 측면에서 동일한

코드 포인트(유니코드 문자의 숫자 값)을 표시할 수 있는 방법이 여러 가지라는 것입니다. 모든

유니코드 코드 포인트를 간단히 통일되게 표현할 수 있는 유일한 방법이 각 코드 포인트에 대해

4 바이트


를 사용하는 방법뿐이라면, 대부분의 개발자는 유니코드가 메모리 및 처리 측면에서 너무

많은 대가를 요구한다고 생각할 것입니다. (Delphi 에서는 유니코드 코드 포인트를 UCS4Char 

데이터 타입으로 나타낼 수 있습니다) 


  잘 알려진 “UTF”라는 용어가 Unicode Transformation Format의 약어라는 것을 아는 사람은 별로

없습니다. 이는 유니코드 표준의 일부인 알고리즘 매핑으로서 각 코드 포인트(문자의 절대적인

숫자 표현)를 지정된 문자를 표현하는 바이트의 고유 시퀀스에 매핑합니다. 매핑은 양 방향으로

사용되어, 다른 표현으로 서로 전환할 수 있습니다. 

  표준은 세트의 처음 부분(처음 128개의 문자)을 표현하는 데 몇 바이트를 사용하느냐에 따라

이러한 3개의 인코딩 또는 형식(8, 16 또는 32)을 정의합니다. 인코딩의 3가지 형식 모두가 각 코드

포인트에 대해 최대 4바이트의 데이터를 필요로 한다는 것은 흥미로운 사실입니다. 

    • UTF-8은 문자를 1 ~ 4바이트의 변수-길이 인코딩으로 변환합니다. UTF-8은 HTML 등의 프로토콜에서 자주 사용되는데, 그것은 대부분의 문자가 ASCII 집합에 포함되는 경우(HTML의 마커처럼) 아주 컴팩트하기 때문입니다. 
    •  UTF-16은 대부분의 운영 체제(Windows 포함)나 Java, .NET과 같은 환경에서 자주 사용됩니다. 대부분의 문자가 2바이트에 맞추어지므로 사용이 편리하며 간결하고 처리 속도가 빠릅니다. 
    •  UTF-32는 처리 작업에 가장 유리하지만(모든 코드 포인트가 동일한 길이를 가지므로), 메모리가 많이 사용되며 실제 사용은 그리 많지 않습니다. 

  멀티바이트 표현(UTF-16 및 UTF-32)과 관련된 또 다른 문제는 바이트 중 어떤 부분이 먼저 오느냐 하는 것입니다. 표준에서는 모든 형태가 허용되므로 UTF-16 BE(big-endian) 또는 LE(littleendian)를 사용할 수 있으며 UTF-32에도 마찬가지입니다.


--> 일반적으로 유니코드 = UTF16으로 이해 하는 것도 무리 없음