Search

utf8과 unicode

문제의 시초 utf16le

UTF-8?

UTF8의 정확한 명칭은 Unicode Transformation Format - 8bit UTF-8은 가장 많이 사용되는 가변 길이 유니코드 인코딩이다. 켄 톰슨과 롭 파이크(Go 언어를 만든 사람)가 만들었다. UTF-8이란 말은 Unicode Transformation Format - 8bit에서 유래했다고.

Unicode?

컴퓨터는 최초에 영어와 몇가지 특수문자만 사용을 했고, 이는 1 byte로도 충분했다.

1 byte란?

컴퓨터가 조작하는 정보의 최소 단위 ( 1 Character 라고도 불렸지만 현재는... )
0
0
0
0
1
0
0
1
컴퓨터가 전세계에서 사용되게 되자, 각국의 사람들은 자국어로도 컴퓨터를 사용하고 싶었고. 그 1 byte 안에 자국어를 할당해서 사용을 하다보니, 자국에서는 문제가 없었으나, 다른 나라 사람이 이용하려고 보니 글자가 와장창 깨져버리고 만다. 그리하여 국제적으로 전세계 언어를 모두 표시할 수 있는 표준코드를 만들기로 하였고 그게 유니코드이다.
Unicode에서 한글은 ?
는 U+B450 은 U+BBFC 이다 는 U+B3C4 은 U+D615 이다 는 U+C0C1 은 U+C720 이다

다시 UTF-8로 돌아와서

가변 인코딩 방식라는 말을 쉽게 풀어 쓰면 글자마다 byte 길이가 다르다는 뜻이다.
a는 1 byte이다
는 3 byte이다
가변을 구분하기 위해서 첫 byte의 앞자리에 10, 110, 110 등을 붙이고 나머지엔 10을 붙인다.
코드값의 자릿수
범위
첫번째 바이트
두번째 바이트
세번째 바이트
네번째 바이트
다섯번째 바이트
여섯번째 바이트
7 bit
0 - 127
0xxxxxx
11 bit
128 - 2,047
110xxxxx
10xxxxxx
16 bit
2,048 - 65,536
1110xxxx
10xxxxxx
10xxxxxx
21 bit
65,536 - 2,097,151
11110xxx
10xxxxxx
10xxxxxx
10xxxxxx
26 bit
111110xx
10xxxxxx
10xxxxxx
10xxxxxx
10xxxxxx
31 bit
1111110x
10xxxxxx
10xxxxxx
10xxxxxx
10xxxxxx
10xxxxxx
그런데, 유니코드 문자 코드표가 있고 그대로 쓰면 되는데 왜 UTF-8로 인코딩을 해야할까? 메모리 때문이다. CPU에서 데이터를 처리하거나, 네트워크로 데이터를 전송할 때, 데이터의 크기는 작을수록 좋다.
또한 Ascii방식과 완벽하게 호환된다는 장점이 있다. UTF-8은 Ascii 코드를 완전하게 내포하고 있다. 1 byte로 표현이 가능한 경우 Ascii로 표현이 가능하여 알파벳의 경우 첫 바이트가 일대일로 매칭되기 때문에, 이미 많은 돈을 인프라와 시스템에 투자를 한 상태에서 기존의 레거시 시스템을 변경하는 것에는 많은 부담이 있는 측면도 있다.
그로인해 가장 많이 사용되는 인코딩 방식이라고 할 수 있다.

UTF-16

UTF-8 은 전세계의 언어를 내포 할 수 있을만큼 큰 그릇이지만, 그럼에도 더 많은 한자와 이모티콘을 저장하고 싶은 욕구로 인해 UTF-16이 등장하였다. 모든 문자를 2 byte 단위로 인코딩 할 수 있고 고정 길이 인코딩 방식 이다.
UTF-8과 비교해 Ascii와 호환이 완벽하지 않지만 한글을 무려 2 byte로 표현이 가능하다. 이는 데이터 관점에서 굉장한 장점이 될 수 있다. 하지만 전세계 평균 컴퓨터 환경은 영어로 되어 있기 때문에 영어를 1 byte로 표현이 가능한 UTF-8이 표준으로 사용된다.

UTF-32

모든 문자가 4 byte 단위로 인코딩된다. 영어 알파벳도 4 byte로 표현이 되기 때문에 UTF-8과 UTF-16과 비교하여 낭비되는 비트가 많다. 이 인코딩 방식의 특장점 중 하나는 고정 길이를 사용하기 때문에 데이터 처리가 단순해진다는 점. UTF-16과 다른 점을 찾아보진 못했다.