기록과 정리

EUC-KR 과 UTF-8 가 무엇인가요? 본문

IT/기타

EUC-KR 과 UTF-8 가 무엇인가요?

zepetto 2021. 7. 30. 17:33

어느날 'UTF-8과 EUC-KR의 차이가 뭐죠?'  이란 질문을 받았다.

 

나를 포함한 개발자들은 시원한 대답을 하지못했고 EUC-KR , UTF-8이 어떤 인코딩 방식인지

이 글을 쓰며 정리를 해보려 합니다.

 

Bit 와 Byte

 

대학에 들어가 집합처럼 처음 배우는 내용이지만 항상 가물가물한 개념이지만 꼭 알아야하죠.

알긴 알지만 정의에 대해서 명확하게 집고 넘어가봅시다.

 

비트는 컴퓨터 및 시스템에서 데이터를 메모리에 저장을 할때 , 메모리에 있는 이진수 한 자리를 비트라고 합니다.

'단위'인 비트가 8개가 모여 8자리의 이진수표현을 만들수 있는데 이떄 묶여진 비트를 '바이트'라 합니다.

 

2진수와 16진수

컴퓨터 값을 표현할 때, 2진수의 값을 16진수의 값으로 표현할 수 있습니다. 

 

1010(2) -> 2^3 + 2^1 = A(16)

 

위와 같이 변환이 가능한 ( 윈도우 계산기에 converting 기능을 이용하세요 ) 16진수는 16개의 기호를 사용합니다.

A~F , 0~9 로 말이죠.

 

Encoding 

encoding이란 '가'라는 글자를 컴퓨터가 인식할 수 있도록하는 과정을 말합니다. 그와 반대로 컴퓨터가 '가'라는 문자로 표현하는 방식을 decoding이라 합니다.

 

EUC-KR

위와 같은 인코딩 방식에는 크게 2가지가 있습니다. 많이 아시는 EUC-KR과 UTF-8인데요.

우선 EUC-KR은 2byte로 한글을 표현한 인코딩 방식입니다.  

 

특수문자도 있습니다.
한글도 보입니다.

 

b0a0을 프로그래머용 윈도우 계산기로 돌려보면 아래와 같은 결과가 나옵니다.

 

2진수 1011 0000 1010 0000

 

즉 EUC-KR 인코딩 방식으로 '가'를 인코딩하면 컴퓨터는 1011 0000 1010 0000 으로 인식을 하게됩니다.
( 오타 > B0A0가 아닌 B0A1으로 하셔야 합니다. )

 

유니코드

하던 이야기를 잠시 끊고 태초의 컴퓨터 이야기를 하겠습니다. 컴퓨터는 단순 계산기였지만 점차 발전이 되며 한글이나 영어와 같은 문자 데이터 교환이 가능하게 되었습니다. 해당 문자 교환을 위해 태어난 인코딩 방식이 있는데요.

ASCII(American Standard Code for Information Interchange) 가 주인공입니다.

 

ASCII 코드는 0~126 까지 존재하며 2^7개로 이루어져 있습니다. (*0x00 ~ 0x7F , 특수문자, 제어문자, 숫자, 알파벳 등) 

각 나라마다의 문자가 달랐기때문에 해당ASCII코드는 나라별로 만들어져 관리가 되었고 나라간의 데이터를 주고 받기 위해 이를 통용하는 '유니코드' 가 표준안이 되었습니다.

 

유니코드 값을 나타내는 방식으로 코드포인트(code point)를 사용합니다 (U+), 예를 들어 A와 같은 값은 'U+0041' 로 표현합니다. 

 

유니코드의 인코딩 방식 , UTF-8

유니코드의 인코딩 방식에는 크게 세가지가 있습니다. UTF-8 , UTF-16, UTF-32

UTF-8 방식은 '가변적' 입니다. 한글을 2byte로 고정하는 EUC-KR과는 차이가 있네요. 유니코드드 각 글자마다 고유의 코드 값을 가집니다. 

 

 

'한글의 유니코드표

 

'가'라는 값은 AC00을 가르키고 있습니다. 코드포인터(U+)를 붙이면 U+AC00이 되겠네요. AC00 을 UTF-8방식으로 인코딩한다는 것은 해당 코드포인트 범위마다 인코딩 방법이 있는데요.

 

해당 코드의 경우 1110xxxx 10xxxxxx 10xxxxxx 3byte 형식으로 변환하는 범위에 속해진 코드값입니다.

AC00 -> 1010 1100 0000 0000 -> 11101010 10110000 10000000 -> EA B0 80 으로 변환되어

컴퓨터가 인식을 하게되는 과정을 UTF-8 Encoding 방식으로 간단히(!!) 알아보았습니다.  

 

이상 EUC-KR, UTF-8에 대한 간단한 정리였습니다.