UTF-8, 유니코드(UniCode)에 대하여
우선 UTF-8에 대해서 이해하기 위해서는 유니코드라 무엇인지에 대한 사전 지식이 먼저 필요하다.
UTF-8과 유니코드에 대한 개념을 잡으려고 인터넷 이곳저곳을 다니다 보면 뭔가 설명이 제각각이고 말이 조금씩 달라서 혼동이 온 사람들이 분명 있을 것이다. 내가 그랬다.
여기서 내가 이해한 개념을 딱 정리해보겠다.
유니코드(UniCode)란 무엇인가?
인터넷 초창기 시절에는 아스키 코드로 문자를 표현했다.
아스키코드는 영어와 기호, 숫자가 존재하며 1바이트로 전부 표현이 가능하다.
그런데 시간이 흘러 여러 나라에서 컴퓨터를 사용하게 되고, 각 나라의 여러 문자들을 사용하게 된다.
그래서 아스키 코드만으로는 다양한 문자를 표현할 수가 없었고, 이것이 유니코드의 등장 배경이다.
내가 '가' 라는 문자를 저장한 txt를 배포한다고 가정하자.
그러면 '가' 라는 문자는 어떠한 값으로 인코딩 되어 txt에 저장이 될 것이다. 인코딩 된 값을 'U+AC00'이라고 하겠다.
이러면 다른 누군가가 이 txt를 열었을때 인코딩 된 저 'U+AC00'이라는 값을 디코딩하여 '가'라고 출력해줘야 할 것이다. 그런데 'U+AC00'이라는 값이 어떤 나라에서는 '나'이고, 또 어떤 지역에서는 '카' 라면 우리는 문자 데이터를 사용하는데 큰 제약이 있을 것이다. 그래서 전 세계에서 이 문자 코드값을 약속한 것이다.
"앞으로 'U+AC00'은 문자 '가' 이다. 그냥 약속이니까 다들 이렇게 쓰도록!" 이라고 정의를 내린 것.
이것이 전 세계의 문자 표준 유니코드이다.
UTF-8
UTF-8은 유니코드를 인코딩하는 방식이며 '가변 길이 유니코드 인코딩' 방식이라고 한다.
그래서 문자마다 그 문자를 저장하기 위한 byte의 길이가 다르다.
예를 들면 'a'를 UTF-8로 인코딩하면 1byte가 되고, '가'는 3byte가 된다.
문자에 따라서 8비트씩 나누어 인코딩하며 문자에 따라 최대32비트(4바이트)까지 쓰인다. (최대 6바이트까지라고 하는데 다른 인코딩과의 호환성을 위해서 4바이트까지만 쓴다고 함)
1바이트 영역은 기존 아스키 코드와 정확하게 호환되기에 기존에 아스키코드로 작성된 문서나 사이트는 별 다른 변환 처리가 필요 없다.
한국어는 3바이트 영역에서 인코딩 된다고 한다.
유니코드가 널리 보급되기 전 우리나라에서는 한글을 인코딩하는 EUC-KR을 쓰는 사이트가 많이 남아있어서 한 떄 각종 브라우저에 '주소를 UTF-8로 보냄' 옵션을 체크 해제하는 팁이 널리 퍼졌었다.
UTF-16, UTF-32 같은 경우에는 뒤에 붙은 숫자가 의미하듯
16비트, 32비트로 인덱스를 나누어 인코딩한다.
그러나 이 경우엔 UTF-8과 약간의 차이점들이 있는데 리틀엔디안, 빅엔디안의 차이가 생긴다고 한다.
설명이 부족하다고 판단되어 다시 정리해서 포스팅하였습니다 ! ^^
https://hub1234.tistory.com/64