[CS] 문자 인코딩, 유니코드, UTF-8

원서연·2023년 11월 17일
0

1. 문자 인코딩(Encoding)

컴퓨터는 0, 1(binary)로 정보를 저장한다.
사람이 0, 1 binary로 정보를 읽고 쓰기는 곤란하다.
그래서 우리가 사용하는 문자들을 숫자에 대응시킨다.
이렇게 문자열 셋이 만들어진 것이다.

사람이 문자를 입력하면 컴퓨터는 바이너리 숫자로 저장하고,
반대로 컴퓨터는 사람에게 문자열 셋을 기반으로 바이너리 정보를 문자로 보여주는 것이다.

문자열셋을 기반으로, 사람의 문자를 컴퓨터가 인식하도록 바이너리 값으로 바꿔주는 것
"문자 인코딩(Character Encoding)"이라고 한다.

2. 유니코드

글자 깨짐 같은 문제는 왜 일어나는 것인가?
문자열 셋이 통일이 안 돼있기 때문이다.

문자 인코딩 종류는 엄청나게 많다.

아스키 코드도 이러한 문자열 셋이다. 가장 초창기에 미국에서 만들어졌다.
이것은 미국에서 사용되는 알파벳과 숫자 등만 들어있기 때문에, 한글이나 한자 등의 다른 문자체계는 물론, 유럽 등에서 사용되는 확장 문자 등도 표현할 수 없다.

그래서 나라들마다 문자열 셋이 만들어져서 종류가 많아지게 된 것이다.

즉, 문자열 셋과 인코딩 방식을 서로 맞추지 않아서 글자들이 깨지는 일들이 생겼던 것이다.

전 세계의 문자들을 하나의 문자열 셋으로 통일하여 만들어낸 것이 Unicode이다.
'하나'를 뜻하는 'Uni'에서 알 수 있듯, 모든 문자들을 하나의 표에 다 포함시킨 것이다.

3. UTF-8

Unicode를 통해서 전 세계의 모든 문자들 및 이모지까지 나타낼 수 있게 되었다.

이걸 UTF-8 등으로 인코딩해서 사용하는 것이다.

"유니코드 vs UTF-8"
유니코드는 각 문자마다 숫자를 정해놓은 표. (문자열 셋)
UTF-8은 문자열 셋을 인코딩하는 방식이다. (인코딩 방식)

예를 들어, A가 이진수 숫자로 1000001(65)라고 했을 때, 컴퓨터에 각 문자마다 0, 1을 저장할
자리 수를 얼마나 할당하느냐에 따라, 7비트로 할당할 수도 있고, 8비트 즉 1바이트씩 차지하도록 할 수도 있다. 이렇게 하면 표현할 수 있는 문자 종류의 수에 한계가 있을테니까 앞에는 0으로 채워넣어서 2바이트씩 통일해서 각 문자를 컴퓨터에 할당할 수 있다. (00000000 01000001)

유니코드의 각 문자마다 숫자가 정해져 있기는 한데, 이 숫자를 어떤 방식으로 컴퓨터에 저장할 것인지를 결정하는 것이 인코딩 방식이다. UTF-8은 인코딩 방식들 중 하나인 것이다.

유니코드 이전에 한글에 많이 쓰였던 'EUC-KR'도 한글 표를 읽는 '인코딩 방식'이다.
유니코드라는 문자열 셋의 인코딩 방식으로는 UCS-2, UCS-4, UTF-32, UTF-16 그리고 UTF-8 등 여럿이 있는데, 문자마다 적절한 바이트 수를 차지하도록 해서, 다른 방식들보다 일반적으로 적은 용량만 쓰면서도, 호환 문제도 가장 덜 발생하는 UTF-8전세계적으로 가장 널리 사용됩니다.

앞으로 인코딩 방식을 선택할 때, 왠만하면 UTF-8을 고르면 되는 것이다.

인코딩(Encoding)

인코딩은 여러 분야에서 쓰이는 표현이다.

어떤 것을 다른 것으로 바꿔주는 것'인코딩(Encoding)' 이라고 한다.
그 반대는 '디코딩(Decoding)' 이라고 한다

웹 프로그래밍에서는 URL Encoding이라는 게 있다.
이건 0이랑 1로 바꾸는 것은 아니고,
웹사이트의 주소 뒤에 URL 파라미터라는 걸 넣어서, 서버에 인자를 보낼 수 있다.

예를 들어 Channel 얄코 라는 검색어를 넣어서 검색을 하면
주소창에는 Channel%20얄코 이처럼 스페이스가 '%20'으로 바뀐 것으로 보이는데
이것을 또 복사해서 메모장에 붙여넣어서 보면
실제로는 Channel%20%EC%96%84%EC%BD%94 이런 텍스트로 인코딩이 된다는 것을 확인할 수 있다.

왜 이렇게 바뀌는 것인가?
URL에는 아스키 코드의 문자 집합만 사용할 수 있게 되어있습니다.
따라서 이처럼 스페이스, 한글 등을 포함한 문자열을 이처럼 약속된 방식으로 아스키로 치환해서
서버로 전송하도록 하는 것이 URL 인코딩인 것이다.

즉 이것은 아스키가 아닌 문자들을 URL에 집어넣을 수 있도록, 아스키로 바꿔주는 인코딩인 것이다. (한글 등이 숫자/알파벳으로 URL Encoding되는 방식은 UTF-8 이라고 한다.)
이처럼 인코딩이란 것은 여러 방면에서 사용될 수 있는 것이다.

출처) https://www.youtube.com/watch?v=1jo6q4dihoU
by 얄팍한 코딩사전

profile
웹 백엔드 프로그래밍 Today I Learned

0개의 댓글