본문 바로가기

Computer Science

문자열 세트(또는 문자셋) 및 유니코드 & 인코딩, UTF-8란?

1. 문자열 세트(또는 문자셋)

컴퓨터는 정보들을 기본적으로 0과 1, 이 두 개로만 저장한다.

그렇다고 사람보고 0과 1만 가지고 정보들을 읽고 쓰라고 하면 매우 힘들다.

그래서 우리가 사용하는 각각의 문자들에 대응하는 숫자를 매긴다.

ex: A=65, B=66. 숫자는 이진법으로 0과 1로 나타낸다. --> A=1000001

 

**문자열 셋(charset) : 사용되는 모든 글자에다가 각각 숫자를 매긴 것.

ASCII 문자열셋의 일부. 출처 : 얄팍한 코딩사전

즉, 사람이 문자를 입력하면 컴퓨터는 그것들을 (문자 인코딩을 통해)0, 1로 저장하고, 사람들에게 보여줄때는 해당 글자를 찾아서 텍스트를 보여준다.

** 문자인코딩(Charater Encoding) : 사람의 문자를 컴퓨터가 알아볼 수 있게 바이너리(0과 1) 신호로 바꿔주는 것.  

사람문자 ----> 문자 인코딩 --->  0, 1

 

 

 

Q. 그렇다면, 이 문자열 세트 표대로 바이너리를 문자로 바꿔다가 보여주면되지, 왜 글자깨짐같은건 일어나는걸까?

A. 문자열 셋이 통일이 되지 않았기 때문...!

글자깨짐. 출처 : 얄팍한 코딩사전

 

문자열 세트의 종류는 정말 많다. (아래의 문자열 세트 종류마다 각각 위의 표가 있다고 생각하면 된다.)

출처 : 위키백과

 

 

 

위 표는 ASCII라는 문자열 세트의 일부. 가장 초창기에 미국에서 만들어 진 것.

이 ASCII 코드에는 미국에서 사용되는 알파벳 + 숫자 등만 들어있기 때문에,

한글이나 한자 등의 다른 문자체계는 물론, 유럽 등에서 사용되는 확장자 등도 표현할 수 없었다.

그래서 나라마다 그 나라만의 문자열 세트가 만들어 진 것. --> 문자열 세트의 춘추전국시대가 펼쳐짐!

 

 

2. 유니코드(Unicode)

문자열 셋과 인코딩 방식을 서로 맞추지 않으면 글자들이 깨지는 일이 생겼다.

특히, 외국어 교육자료처럼 한 문서 안에 여러 국가 문자들이 들어가는건 매우 난감한 상황.

그렇다면, 전 세계 문자들을 표 한군데에 적으면 안되나?

--> 그렇게 탄생한 (통일된!!!)문자열 셋 : 유니코드(Unicode)

하나를 뜻하는 Uni에서 알 수 있듯, 모든 문자들을 이 하나의 표에 다 포함시킨다.

모든 문자를 이 유니코드라는 하나의 문자열 셋으로 통일했기 때문에, 이걸로 한글이든 태국문자, 이모티콘까지 나타낼 수 있다.

 

 

3. 인코딩

어떤 것을 다른 형식으로 바꿔주는 것. 

** 문자인코딩(Charater Encoding) : 사람의 문자를 컴퓨터가 알아볼 수 있게 바이너리(0과 1) 신호로 바꿔주는 것.  

**UTF-8, UTF-16 등 : 유니코드 기반의 문자들을 바이트열에 표현하는 인코딩 방식

.

 

4. UTF-8 vs UTF-16

* UTF-8

- 8bit 기반의 인코딩 방식.

- 일반적으로 적은 용량만 쓰면서도 호환 문제도 가장 덜 발새하여, 전세계적으로 가장 널리 사용됨.

- 인코딩하려는 문자의 코드가 속한 범위에 따라 1byte ~ 4byte로 인코딩하는 가변 길이 인코딩 방식. 자주 사용되는 문자는 짧은 바이트로 표현하고 그렇지 않은 문자는 긴 바이트로 표현함으로써 저장 공간을 효율적으로 사용한다.

- 기본적으로 첫 128개의 문자(0x0000 ~ 0x007F 범위에 속하는 ASCII 문자)들은 특별한 변형 없이 1byte에 그대로 인코딩 되기 때문에, 영어만 사용할 경우 문자 하나 당 1byte만 사용하게 된다.

그러나 만약 중동, 유럽 지역의 언어를 사용한다면 문자 하나 당 2byte를 사용하게 되고,

동아시아권 언어(한글 포함)를 사용한다면 3byte 이상까지도 사용하게 된다.

보조글자는 4bytes 차지. 이모지는 보조글자에 해당되므로 4bytes.

- 바이트 순서가 고정됨.

ex: '코' : 11101100 10111101 10010100 -- 3bytes

'b' : 01100010 --1byte

 

 

* UTF-16

- 16bit 기반의 인코딩 방식. 그렇다고 해서 16bit 고정 길이로 인코딩하는 것은 아니고, 이 역시 UTF-8과 마찬가지로 가변 길이 인코딩 방식이다. 

- 자주 사용하는 문자는 2byte, 그렇지 않은 문자는 4byte로 표현한다.

- 한글을 3byte로 표현하는 UTF-8과 달리 UTF-16은 한글을 2byte로 인코딩할 수 있기 때문에 저장 공간을 더욱 효율적으로 쓸 수 있다는 장점이 있다.

- 그러나 ANSI와 호환이 되지 않는 문제, Byte Ordering을 고려해야 하는 문제 등으로 인해 UTF-8보다는 사용의 복잡성이 높다는 단점이 있다. 

출처 : https://it-eldorado.tistory.com/61

 

 

 

 

 

모든 내용은 얄코 영상 및 코드스테이츠를 기반으로 작성하였습니다.