기타지식들/운영체제

아스키코드,EUC-KR,유니코드,UTF-8알아보기

원원 2023. 6. 4. 16:37

안녕하세요. 오늘은 컴퓨터가 문자를 표현하는 방법에 대해 알아보겠습니다.

사람이 사용하는 문자를 컴퓨터는 0과 1의 조합으로 변환해서 인식합니다. 이런 과정을 인코딩이라고 부릅니다.
[문자 => 0,1] 로 변환 : 인코딩
[0,1 => 문자] 로 변환 : 디코딩

인코딩에는 다양한 방법이 있습니다. 

1. 아스키코드(ASCII CODE)
아스키코드는 7비트로 이루어져있고 총 128개까지 표현이 가능합니다. 

아스키 테이블입니다. 0~31번까지는 제어문자입니다. 예를들어 0번은 NULL이고 10번은 Line Feed입니다.
일반적으로 C언에어서 아스키코드 사용이 가능합니다. 아스키테이블을 보면 A는 65입니다

#include <stdio.h>

int main()
{
	char c = 'A';
	char c2 = 65;
	
	printf("%d ,%d \n",c,c2);
	printf("%c ,%c \n",c,c2);
	
	if (c == c2)
		printf("equal \n");
	else
		printf("not equal \n");
}

출력결과
65 ,65
A ,A
equal
-----------
변수 c와 c2에 'A'와 65를 저장했는데, 결과를 보면 같은걸 저장했다고 볼 수 있습니다. A는 65를 의미하기때문에 같습니다.


2. EUC-KR(KS X 1001, KS X 1003기반)
한글을 표현하는 인코딩 방식입니다. 2바이트를 조합해서 한글을 표현합니다.

테이블의 일부이고, 예를들어 '가'를 표현하려면 0xB0A1라고 표현합니다.  최대 2350 개의 한글을 표현할수있는데, 정의되지않는 웎,훾 등은 표현이 불가능합니다. 그래서 EUC-KR인코딩을 사용하는곳에서 가끔 한글이 깨진것을 볼 수 있습니다. 

아래의 사이트에서 EUC-KR인코딩 및 UTF-8 테스트를 쉽게 할 수 있습니다.
https://dencode.com/

 

3. 유니코드
모든 나라의 언어를 통합한 인코딩 방식입니다. 저장할때 1~4byte크기로 저장합니다. 예를들어 영어는 1byte, 한글은 2byte로 저장하다보니 어느정도의 크기를 읽어야 하는지 모르기때문에 UTF-8, UTF16, UTF32등 다양한 인코딩 방법이 있습니다.  (참고로 인터넷은 UTF-8을 많이 사용하고 윈도우프로그램은 UTF-16을 많이사용 합니다)
'원'을 UTF-8방식으로 표현해보겠습니다.
https://unicode.org/charts/

'원'은 0xC6D0입니다. 

시작(0x) (0x) 1byte 2byte 3byte 4byte
0000 007F 0xxxxxxx      
0080 07FF 110xxxxx 10xxxxxx    
0800 FFFF 1110xxxx 10xxxxxx 10xxxxxx  
1000 10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0xC6D0은 0x0800~0xFFFF 범위에 들어가므로 3바이트입니다.
0xC6D0은 0b1100011011010000이고 차례대로 대입하면 됩니다.
그러므로 '원'을 UTF-8인코딩하면 11101100 10011011 10010000입니다.

 

 

'기타지식들 > 운영체제' 카테고리의 다른 글

운영체제-프로세스란?  (0) 2020.11.17
비선점스케줄링 시간구하기  (0) 2017.02.19
산술Shift연산  (0) 2017.02.16