문자열 인코딩

yezo cha·2021년 8월 5일
0
post-thumbnail

프로그래밍에서 문자열을 다루는 방법
유니코드, 인코딩에 대해 이해하기
ASCII, UTF-8

문자열

문자열을 다루는 디테일한 방식에 대해 전부 알 필요는 없지만, 프로그래밍 언어마다 문자열을 다루는 자료형의 차이를 이해하기 위해 문자열을 다루는 기본적인 방식은 알아두자.

유니코드 ?

유니코드는 인코딩이 아니다.

유니코드(Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업표준이다.
기본적으로 유니코드의 목적현존하는 문자 인코딩 방법을 모두 유니코드로 교체하는 것이다.

유니코드는 전세계 거의 모든 문자를 2bytes로 1:1 맵핑 시키는 방식을 말하고, 유니코드를 표현하는 여러가지 인코딩 방식들이 존재한다. 유니코드_목록
UTF-8, UTF-16 등이 인코딩 방식 중 하나다.

그렇다면 인코딩은 뭘까?

인코딩 Encoding(부호화)

우리가 사용하는 컴퓨터는 0, 1밖에 모르는 바보다.
따라서, 우리가 사용하는 문자를 컴퓨터에 표현하기 위해서는 약속된 규칙에 따라서 0과 1로 변환하는 과정이 필요하다.
이 과정을 인코딩이라고 한다. 디코딩(Decoding)은 그 반대다.

즉, 인코딩어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것이다.
이 신호를 입력하는 인코딩과 문자를 해독하는 디코딩을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 하는데, 인코딩과 디코딩의 기준을 문자셋(charset)이라고 한다.
문자셋의 국제 표준이 유니코드이다.

아스키 ASCII

American Standard Code for Information Interchange.
ASCII영문 알파벳을 사용하는 대표적인 문자 인코딩이다.
128개의 문자, 7비트로 모든 영어 알파벳을 표현할 수 있다.

왜 8비트가 아닌 7비트를 사용할까?
1byte(8bit) 단위의 통신에서 7비트를 제외한 나머지 1비트는 통신 에러를 감지하기 위한 체크섬으로 사용되었다고 한다.

유니코드는 ASCII를 확장한 형태이다.

확장된 아스키코드: ANSI

American National Standard Institute.
8비트로 구성되어 있고, 256개의 문자를 표현할 수 있다.
ANSI의 앞 7비트는 ASCII와 동일하고, 뒤의 1비트(CodePage)를 이용하여 영어 외의 다른 언어의 문자를 표현한다.

UTF-8, UTF-16

UTF-8UTF-16인코딩 방식의 차이를 의미한다.

UTF-8Universal Coded Character Set + Transformation Format – 8-bit의 약자로, UTF- 뒤에 등장하는 숫자는 비트(bit)다.
유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나로서, ANSI의 단점을 보완하기 위해 만들어졌다.

ANSI는 다국어를 지원하기 위해 CodePage 정보를 미리 알고 있어야 한다.
UTF-8멀티바이트 개념을 사용하여 하나의 Character Set에 거의 모든 문자를 넣었다.

1. UTF-8 특징: 가변 길이 인코딩

UTF-81byte(8bit) 기반이다.
UTF-8은 유니코드 한 문자를 나타내기 위해 1 byte(=8 bits)에서 4 bytes까지 사용하는, 가변 표기하는 인코딩 방식이다.

네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩된다.
사용된 문자에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문이다.

UTF-8은 ASCII 코드의 경우 1 byte, 크게 영어 외 글자는 2-3 byte, 보조 글자는 4 byte를 차지한다.
1byte 단위로 확장하며 문자를 표현한다.
이모지는 보조 글자에 해당하기 때문에 4 byte가 필요하다.

2. UTF-8 특징: 바이트 순서가 고정됨

UTF-16에 비해 바이트 순서를 따지지 않고, 순서가 정해져 있다.

3. UTF-16 특징: 코드 그대로 바이트로 표현이 가능, 바이트 순서가 다양함

UTF-1616비트 기반으로 저장하는 UTF-8의 변형이라고 생각하자.
한글의 경우 UTF-8로 저장할 경우 3bytes가 필요한데, UTF-16으로 저장하게 되면 2bytes면 되기 때문에 용량의 이점이 있다.
그러나 경우에 따라서 2bytes 이상을 사용하는 경우가 있어 용량의 이점이 크다고 보긴 어렵다.


NAVER_D2: 한글 인코딩의 이해
문자열 인코딩 완벽 정복하기(for 개발자)

profile
(ง •̀_•́)ง

0개의 댓글