문자열 인코딩 개념
-
문자열 인코딩이란
2진법을 사용하는 컴퓨터가
인간의 언어를 일정한 규칙에 따라 2진수로 변환하는 방식이다.
컴퓨터는 ‘안녕하세요’와 같은 문장을 그대로 읽고 처리할 수 없기 때문이다.
-
그래서 컴퓨터는
2진수와 문자를 1:1로 대응하는 규칙을 통해 2진수로 문자를 처리한다.
ex) ( 2진수 : 0100 0001 ) : ( 문자 : A )
Q. 인터넷에서 글자가 깨지거나 보이지 않는 문제는 왜 발생하는 걸까?
-
컴퓨터가 처음 등장했을 때
모든 프로그램은 영어와 일부 특수 문자만 지원했다.
그러나 시간이 지나 많은 국가가 컴퓨터를 사용하기 시작했고
국가별로 사용하는 언어를 표현하고자
독자적인 규칙을 만들기 시작했다.
참고로 한국에서는 독자적인 인코딩 방식인 EUC-KR을 만들었다.
-
독자적인 규칙을 만드는 움직임은
모든 언어를 같은 규칙으로 표현할 수 있는 유니코드 방식이 등장하면서 통일되었다.
-
그러나 모든 개발 환경이 유니코드를 동일하게 처리하지 않아
개발자는 서로 호환되지 않는 유니코드 문자열 인코딩 방식(UTF-8, UTF-16, UTF-32) 중 하나를 택해야 한다.
문자 집합 vs 문자열 인코딩
문자 집합
-
사용할 수 있는 문자들의 집합
ex) 유니코드, ISO-8859, ASCII 등
문자열 인코딩
-
문자를 코드로 표현하는 방식
ex) 유니코드라는 문자 집합 을 표현하는 문자열 인코딩은 UTF-8, UTF-16, UTF-32 등이 있다.
아스키 코드(ASCII)
-
처음으로 표준을 정립한 문자열 인코딩 방식으로 아직도 많이 사용된다.
-
사용할 수 있는 문자의 종류에는
대/소문자, 공백 및 특수 문자들이 있으며
문자를 표현할 때는 0 ~ 127까지
총 128개의 숫자를 사용한다.
-
그림에서 알 수 있듯이
아스키 코드는 영어를 제외한 다른 언어를 표현할 수 없다.
그래서 각 나라에서 아스키코드 대신
독자적인 문자 집합과 인코딩 방식을 만들었다.
-
아스키코드에 대한 자세한 개념은 아스키코드(ASCII Code)을 참고하자.
EUC-KR
-
한국에서는 EUC-KR 문자 집합을 만들었다.
한국어 문자 집합으로
문자 하나를 표현하기 위해 2바이트를 사용한다.
단 아스키코드 문자를 표현할 때는
1바이트를 사용하기 때문에 아스키코드와 호환이 된다.
EUC-KR 특징
2바이트 저장
-
좌측에 있는 코드(b0a0, b0b0 등)를 기준으로
오른쪽으로 한 칸씩 이동할 때마다 1바이트를 더한다.
ex) ‘가’ 문자는 b0a0 코드 줄의 2번째 칸에 있어 1바이트를 더해 b0a1로 표현한다.
b0a1는 0xb0, 0xa1로 나뉘어
총 2바이트를 사용하게 된다.
완성형 코드
-
모든 글자가 완성된 형태로만 존재하는 완성형 코드이다.
따라서 조합해 문자를 만들 수 없으므로 표현할 수 없는 한글이 일부 존재하지만
그 문자는 잘 사용되지 않는다.
지원 언어
-
EUC-KR에는 한글뿐만 아니라
숫자, 특수 기호, 영문, 한문, 일어가 존재한다.
UTF-8, UTF-16
-
유니코드 문자열 인코딩 방식(UTF-8, UTF-16, UTF-32)에 대해서는
유니코드와 UTF-8 / UTF-16 글을 참고하자.