이 글은 한빛미디어 출판사의 '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저)'를 정리한 내용입니다.
문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
ex) 문자 집합이 {a, b, c, d, e}인 경우 컴퓨터는 이 다섯 개의 문자는 이해할 수 있지만 f나 g같은 문자는 이해하지 못함.
문자 인코딩: 문자 집합에 속한 문자를 컴퓨터가 이해할 수 있도록 0과 1로 변환하는 과정
문자 디코딩: 인코딩의 반대 과정, 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 바꾸는 과정
초창기 문자 집합 중 하나. 영어 알파벳과 아라비아 숫자, 일부 특수 문자 포함.
출처: 위키피디아 https://en.wikipedia.org/wiki/ASCII
아스키 코드는 매우 간단히 인코딩이 되지만, 한글을 포함한 다른 여러 문자를 표현할 수 없다는 한계가 있음.
이후 더 다양한 문자를 표현하기 위해 1비트를 추가한 확장 아스키가 등장했지만 그럼에도 불구하고 256가지의 문자밖에 표현하지 못함.
한글을 0과 1로 표현할 수 있는 인코딩 방식
(웹 개발을 할 때 많이 봤던 인코딩 방식이다)
완성형 인코딩 방식: 초성, 중성, 종성으로 이루어진 완성된 글자 하나에 고유한 코드 부여
ex) 가 -> 1, 나 -> 2, 다 -> 3 (실제 코드가 아닌 예시임)
조합형 인코딩 방식: 초성 따로, 중성 따로, 종성 따로 각자 비트열을 할당하여 이것들의 조합으로 하나의 글자 코드 완성
ex) ㄱ -> 0010, ㅏ -> 0011, ㅇ -> 0001 0011,
'강' -> 0010 0011 0001 0011 (실제 코드가 아닌 예시임)
EUC-KR은 KS X 1001, KS X 1003이라는 문자 집합을 기반으로 하는 대표적인 완성형 인코딩 방식.
EUC-KR은 초성, 중성, 종성이 결합된 한글 단어에 2바이트 크기의 코드 부여.
즉, 한글 1글자를 표현하려면 16비트 필요.
출처: https://linarena.github.io/web_0x04
그러나 문자 집합에 정의되지 않은 '쀍', '쀓', '믜'같은 문자는 표현할 수 없음.
이러한 한계를 해결하기 위해 등장한 것이 마이크로소프트의 CP949.
CP949는 EUC-KR의 확장 버전으로, 더욱 다양한 문자를 표현할 수 있지만 한글 전체를 표현하기에 넉넉하지는 않음.
유니코드: 모든 언어의 문자 집합과 인코딩 방식을 통일해 모든 언어를 아우르는 문자 집합과 통일된 표준 인코딩 방식.
다양한 한글을 포함해 대부분 나라의 문자, 특수문자, 화살표, 이모티콘을 코드로 표현 가능
현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합
EUC-KR처럼 각 문자마다 고유한 값이 부여
ex) '한' -> D55C(16)
'글' -> AE00(16)
유니코드는 글자에 부여된 값을 다양한 방법으로 인코딩 함.
이 인코딩 방법은 UTF-8, UTF-16, UTF-32등 여러가지가 있는데, 가장 대중적인 방법이 UTF-8.
(UTF는 Unicode Transformation Format의 약어)
UTF-8은 통상 1바이트부터 4바이트까지의 인코딩 결과를 만들어 냄.
즉, 인코딩 결과값이 1바이트가 될 수도 있고 2바이트, 3바이트, 4바이트가 될 수 있는 것.
몇 바이트가 되는지는 유니코드 문자에 부여된 값의 범위에 따라 결정됨.
X표가 있는 곳에 유니코드 문자에 부여된 고유한 값이 들어간다.
ex) '한','글'을 UTF-8 방식으로 인코딩해보자.
'한'의 유니코드 값은 D55C(16), '글'의 유니코드 값은 AE00(16).
'한'과 '글' 모두 3바이트 범위에 속한다.
각각의 유니코드 값을 이진수로 변환하면
'한' -> 1101 0101 0101 1100(2)
'글' -> 1010 1110 0000 0000(2) 이므로
3바이트 형식의 X표에 해당 이진수를 넣으면
'한' -> 11101101 10010101 10011100 (2)
'글' -> 11101010 10111000 10000000 (2)
출처 - '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 강민철 저)'