본문 바로가기

Development

EUC-KR 과 UTF-8

국내 개발 환경에서 쓰이는 문자코드의 대부분을 차지하는 캐릭터 셋이다.

90년대의 한글 코드를 보면 완성형(KSC5601)과 조합형으로 구분지을 수 있다.

EUC-KR 은 그 완성형 코드의 발전 형태라 볼 수 있다.

특수 문자 + US-ASCII + KSC5601 = EUC-KR

자바는 태생이 유니코드이다. 엄밀히 자바 표준으로 사용하는 코드는 UCS-2 버전으로 UTF-16의 확장형태를 가진다.

유니코드는 90년대 중반 개발되고 2005년에는 4.1 버전까지 발표되었다.

인코딩 방식은 3종류로 구분된다. 
  • UTF-8
  • UTF-16
  • UTF-32
자바의 표준 인코딩은 UCS-2 인코딩이다. UCS-2 코드는 모든 언어를 2 바이트 고정폭으로 인코딩하고 있다.

UTF-16 의 경우 UCS-2 의 확장형태를 띄고 있다. UCS-2 는 2바이트 고정폭으로 문자를 인코딩하고 있다. 여기에 가변폭 인코딩을 추가한 형태로 2바이트, 4바이트의 크기를 가진다.
기본적으로 16비트(2바이트)의 인코딩을 하기 때문에 과거의 코드와 호환을 가지지 않게 된다. 이에 대한 대안으로 제시된 코드가 UTF-8 코드이다.

UTF-8 은 8비트 가변폭 인코딩을 형태로 캐릭터셋에 따라 1바이트에서 4바이트까지 크기가 변동한다. 첫바이트를 읽어 몇개의 바이트로 구분되어 있는지 파악할 수 있다.
아스키 코드와 호환이 되기 때문에 영어권 캐릭터 셋에 유리하고 데이터베이스 분야의 표준으로 자리잡고 있다.

UTF-32 는 4바이트 기반의 인코딩을 하기 때문에 메모리 낭비가 많아 자주 사용되지 않고 있다.

유니코드 1.X 시스템에서는 한글을 2530자만 담을 수 있는 KSC5601 캐릭터셋만 지원하고 있다.
반면 유니코드 2.X 이후부터는 조합 가능한 모든 글자인 11172자를 지원한다. 구조변경이 있기 때문에 1.X 버전과 호환을 가지지 않는다.

 인코딩 영문 바이트 수  한글 바이트 수 
 UTF-8
 UTF-16(UCS-2) 
 KSC5601 


* 발췌


유니코드의 종류는 크게 3가지가 있습니다.


UTF-8 (웹페이지용 유니코드)
이것은 인터넷이나, 리눅스/유닉스 등에서 사용하는 8비트 유니코드입니다. 웹페이지 관련 작업에서 "유니코드"라고 할 때에는 이 UTF-8 유니코드를 가리킵니다. 영문이나 숫자 등은 1바이트로 표현하고, 한글이나 한자 등은 3바이트로 표현합니다. 웹페이지를 유니코드 인코딩으로 만들 때에는 반드시 "UTF-8 유니코드"를 사용해야 합니다. 8비트 유니코드라고 해서, 16비트 유니코드보다 문자 표현 범위가 작다든지 그런 것은 전혀 없고 동일합니다.

UTF-16 LE (MS OS, Office용 유니코드)
컴퓨터에서 그냥 "유니코드"라고 부를 때에는 이 UTF-16 LE 를 가리키는 경우가 많습니다. MS윈도우2000이나 윈도우XP에서 내부적으로 사용되는 유니코드입니다. 그렇다고 해서 마이크로소프트(MS)가 개발했다는 뜻은 아니고, 표준 유니코드 중의 하나입니다. 문자 1개를 16비트로 표현하는데, 앞의 8비트와 뒤의 8비트의 순서가 거꾸로 되어 있습니다. 인텔CPU가 Little-Endian 이기에, 유니코드도 앞뒤 바이트 순서를 바꾸면 이론적으로 더 처리 속도가 빨라집니다.

UTF-16 BE (Mac, JAVA용 유니코드)
BE는 Big-Endian 의 약자입니다. 이것은 맥(Mac)이나 자바(Java)에서 사용되는 16비트 유니코드인데, 앞뒤 바이트 순서가 거꾸로 바뀌지 않고 그대로 있는 것입니다. UTF-16 BE 는 윈도우에서는 거의 사용되지 않습니다.


MS오피스 관련 작업에서 유니코드를 사용할 때에는 맨 처음의 "UTF-16 LE (일명, 그냥 '유니코드')"를 사용하는 것이 좋습니다. 그렇지 않으면 에러가 발생할 가능성이 높습니다.