2005년 03월 22일
UTF-8 문자열 나누기
UTF-8에 대해 자세히 다룬 문서는 다른 곳을 참고하시고 ㅡㅡ;
이곳에서는 거두절미하고 나누는 원리만 이야기 하겠다.

나는 워낙 이해력이 부족해서 이 간단한 원리를 이해하는데 하루를 소모했다. OTL

UTF-8은 EUC-KR처럼 영숫자 1바이트, 한글 2바이트가 아니다.
아무생각없이 바이트크기를 확인하다가 놀랐다. ㅡㅡ;

0~127까지는 기존 아스키코드와 호완을 위해서 똑같다.
그렇기 때문에 0~127 사이의 문자는 UTF-8 <-> EUC-KR 변환해도 차이가 없다.

아스키코드 127을 넘는 문자들만 잘 처리하면 된다.
UTF-8에서는 한문자를 구성하는데 1~6바이트로 구성되는데 1바이트는 위에서 말했듯이
0~127에 속하는 문자이다.

예를들어 '자'라는 문자는 (236,158,144) 으로 이루어진다.
16진수로 하면 (0xEC,0x9E,0x90) 2진수로 하면 (11101100,10011110,10010000) 이렇다.

여기서 '자'를 읽어오는 방법은 '자'라는 문자를 구성하는 3바이트의 코드중 첫번째 바이트의
코드에 의해서 몇바이트를 읽어올지를 알아낼 수 있는 것이다.

(236,158,144) 여기서 236을 읽어들여 UTF-8문서를 참고하면 3바이트로 이루어진 문자라는 것을 알 수 있다.

표는 아래와 같다.


U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


맨위부터 범위에 해당하면 1바이트, 2바이트... 6바이트로 읽어오면 된다.
셋째줄 3바이트를 보면 1110xxxx게 되어 있는데 첫번째 바이트가 11100000 ~ 11101111
범위안에 드는 코드로 시작된다는 뜻이다.
즉, 첫번째 문자코드가 이 범위에 속하면 3바이트를 읽어오면 된다.
11100000 ~ 11101111 는 10진수로 224 ~ 239가 되고 아까 '자'의 첫번째 바이트가 236이므로
첫번째 바이트부터 시작해서 3바이트를 읽어오면 '자'가 완성되는 것이다.

'97 98 236 158 144 99' => 이렇게 이루어진 문자는 (97) (98) (236 158 144) (99) 이런식으로
분리가 가능하며
출력하면 'a b 자 c' 로 표시가 된다.

유니코드 만든 사람들 참 머리가 좋은거 같다. 이런 멋진 방법을 생각해내다니.

추가로 254, 255 문자는 UTF-8에서 사용하지 않는다.

UTF-8에 대한 한글로된 자세한 문서는 여기를 클릭!

나름대로 쉽게 설명한다고 글을 썼지만 의미전달이 제대로 되었을지 모르겠다. ㅡㅡ;
누구든 도움이 되면 좋겠지만 나의 글로인해 오히려 더 미궁에 빠지지 않을까 걱정스럽다.
by -A2- | 2005/03/22 23:39 | 개발/플밍 | 트랙백 | 덧글(0)
트랙백 주소 : http://ani2life.egloos.com/tb/1108292
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>