UTF-8 vs UTF-16

CJB_ny·2022년 2월 24일
0

Unity_Server

목록 보기
36/55
post-thumbnail

UNICODE & ENCODING

이제는 문자열을 직렬화를 할 것인데

즉, 네트워크 패킷에다가 문자열을 밀어 넣는 작업을 이어서 할 것이다.

UNICODE & ENCODING의 내용에 대해서 훑어 보고 갈 것이다.

우리가 이전에 Hellow NetWorkServer! 이런 문자열을

UTF-8로 보냈었는데

이 UTF-8이 무엇인지 그런 내용에 대해서 살펴 보도록 하겠다.

역사적으로 살펴보자면

UNICODE & ENCODING는 "문자"를 "컴퓨터"한테 "어떻게" 이해를 시킬지에 대한 부분이다.

옛날에는 그래서 "아스키 코드"라 해가지고 1바이트로 표현하는 표를 만들었었다.

오른쪽이 문자이고 이것을 어떻게 나타내는지를 오른쪽에 넣은 것이다.

A는 10진수로 65번 16진수로 0x65로 표현을 하는 것이다.

이런식으로 각각 1바이트 숫자로 대응을 시켜가지고 컴퓨타 한테 이해를 시키는 것이다.

그럼 나중에 컴퓨터한테 65번 찍어줘! 라고 하면은

컴퓨터는 65번이 A라는 것을 알아서 A를 찍게된다.

근데 나라마다 언어가 다르니까 어떤식으로든 1바이트 안에다가 자기 나라의 언어를 밀어 넣어서 사용을 했을 것이다.


그런데 인터넷이 생기고 발전하면서 다른 나라 언어 사이트에도 접속하는 일이

비일비제하게 생김

각기 언어가 다르니까 문자가 깨져서 읽히는 그런 상황이 발생하는 것이다.

그래서!!

UNICODE라고 해가지고

온세상에 있는 온세상에 있는 문자들을 통일한 규격에 담기 시작을 했다.

2바이트로 모든 문자를 다 넣어버림.

그래서 이제 유니코드 표를 보면은

2바이트로 문자를 다 표현하기 시작했다.


그런데 시간이 흐르다보니 희소성이 있는 언어도 추가가 되다보니까

점점점점 공간이 부족하기 시작했다.

그래서

BMP까지가 2바이트로 표현할 수 있는 범위이고 그 밑으로는 3바이트로 넘어간다.

그래서 정확히는 유니코드는 최대 3바이트인데

이것을 어떻게 컴퓨터한테 이해를 시킬까??

그래서 'ㅎ' 칠려면 0x001112 이렇게 3바이트를 만들어 줘가지고

컴퓨터한테 넘겨주는게

첫번째 방법인데

ㅈㄴ 비효율적이라는 생각이 든다.

2. UTF-8

유니코드는

표현하고싶은 문자랑 그녀석이 몇번째 번호인지를 매핑을 한것이

유니코드라고 생각하면 됨.

그다음 이제 ECODING이라는게 들어가는데 어떻게 유니코드를 컴퓨터한테 이해를 시켜줄까? 라는것이다.

그래서 이제 모든 문자를 3바이트로 표현하는 것이 아니라 가변적인 방법을 사용하는 것이다.


그래서 가장 많이 사용(모든 문자를 3바이트로 표현하는 것이 아니라 가변적인 방법)하는

방법중에

UTF-8, UTF-16이 있는데

이중에 8부터 보면

빨간줄 친 부분이 한글이 이 범위 안에 표현되어 있다.

즉, 일반적인 간단한 영문은 1바이트로 표현을 하고

한글과같은 것은 3바이트 == 16비트로 표현을 한다는 것이다.

(8bit == 1바이트, 16bit == 2바이트 아닌가?)

그래서 해외에서는 영문이 많이 들어간다고 하면은

UTF-8이 조금더 도움이 될 것이다.

근데 국내사이트만 보는데 한글 한글자에 3바이트씩 사용하면 낭비가 될 것이다.

이렇게 장단점이 갈린다.

그래서 UTF-8은 외부 문자를 우선시한 방법이라고 보면된다.


3. UTF-16

이녀석은 굉장히 간단한데

BMP영역을 기준으로 이전은 2바이트로 표현하고 그 범위 벗어난 부분 == 빨간박스는

4바이트로 표현하는 것이 된다.

(C#에서 기본적으로 사용하는 것도 UTF-16이다)

파일 입출력은 기본적으로 UTF-8로 하고


그래서 UTF-16으로 작업을 하게되면

영문도 2바이트 한글도 2바이트가 됨.

그렇다는 것은 영문권 기준으로 보면 조금 손해이지만

중국, 한국, 일본 같은 나라는 일반적인 관점에서는 UTF-16이 조금더 좋다.


어쩃든 우리가 서버를 구현을 해가지고

클라랑 통신을 할때는 "문자"라는 개념이 굉장히 모호 하다.

유니코드는 공통적이지만,

어떤식으로 ENCODING을 해가지고 데이터를 가지고 있을지는 갈리게되는데

그렇기 때문에

UTF-8로 할것인지 UTF-16으로 할 것인지를 결정을 해서

맞춰 줘야지만

클라랑 정상적인 통신이 가능해진다.

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글