프로젝트 초반에 꼭 고려해야 하는 요소가 있다. 바로 다국어처리 이다. 이 다국어 처리를 하기 위해서 꼭 알고 있어야 하는 개념이 아래 3가지 이다.
[1]Unicode
어렵게 생각하면 끝도 없다. 하지만 단순하게 생각해서 코드 테이블 인덱스 값이다. 모든 문자에 대해서 Unique한 넘버를 부여한것이 Unicode이다. 이 Unicodes는 플랫폼, 운영체제, 언어에 독립적이다.
Unicode provides a unique number for every character,
no matter what the platform,
no matter what the program,
no matter what the language
http://www.unicode.org/standard/WhatIsUnicode.html
[2]UTF-8
UTF 약어이고 원래 뜻은 (Unicode Transformation Format)이다. 즉, Unicode를 인코딩하는 방법이다.
8의미는 8비트 1바이트를 기준으로 인코딩한다는 의미이다.
중요한 점은 유니코드를 인코딩하는 방식중 하나라는 의미이다.
[3]UTf-16
UTF8과 동일하다.UTF 약어이고 원래 뜻은 (Unicode Transformation Format)이다. 즉, Unicode를 인코딩하는 방법이다.
16비트로 인코딩한다는 의미이다.
중요한 점은 유니코드를 인코딩하는 방식중 하나이다.
[UTf-8, UTF-16비교]
코드 범위(십육진법) | UTF-16BE 표현(이진법) | UTF-8 표현(이진법) | 설명 |
---|---|---|---|
000000-00007F | 00000000 0xxxxxxx | 0xxxxxxx | ASCII와 동일한 범위 |
000080-0007FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx | 첫 바이트는 110 또는 1110으로 시작하고, 나머지 바이트들은 10으로 시작함 |
000800-00FFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx | |
010000-10FFFF | 110110yy yyxxxxxx 110111xx xxxxxxxx | 11110zzz 10zzxxxx 10xxxxxx 10xxxxxx | UTF-16 서러게이트 쌍 영역 (yyyy = zzzzz - 1). UTF-8로 표시된 비트 패턴은 실제 코드 포인트와 동일하다. |
<표 출처 위키백과>
위 표를 참고해서 '위'를 UTF-8로 변환하면,
1) '위' -> (U+C704) 유니코드 인덱스를 가진다.
2) '위'는 U+0800~U+FFFF사이에 있는 글자이다. 표현을 (1110xxxx 10xxxxxx 10xxxxxx)이렇게 해야 한다.
3) 16진수 C704를 이진수로 표현하면 -> 1100-0111-0000-0100 이다.
4) 3)결과를 2)표현식에 매핑하면 11101100 10011100 10000100 이다
5) 4)결과를 바탕으로 3바이트로 인코딩되면 16진수로 표시하면 EC 9C 84 이다.
[UTF-8 <-> UTF16 변환]
UTF-8 <-> UTF-16 서로 변환은 100% 잘된다. 위에서 설명했듯이 Unicode Index(인덱스)를 표현하는 방식만 다르기 때문에 서로간의 호환은 잘된다.
여기서 1가지 고려해야 하는 점은 윈도우는 UTF16이 디폴트이다. 하지만 웹 또는 데이타 베이스에서는 UTF-8을 대부분 주로 사용한다. 즉, 이점을 유의해야 한다.
웹 REST API를 통해서 데이터를 HTTP POST/GET으로 주고 받을때 아래 절차를 따라야 한다.
HTTP SEND -> 문자열 -> UTF16 -> UTF8 변환 -> HTTP SEND
HTTP RECV -> JSON 문자열 -> UTF8 변환(바이트) -> UTF16(문자열(스트링)변환)
[글자 처리]
우리가 글자 "가"를 쓴다고 해 보자. 글자 "가"는 1글자이다.
그러므로 "가"를 나타내는 index가 있다. 물론 "나"를 나타내는 index도 있다.
한글로 표현할 수 있는 글자는 매우 많다.
그 많은 글자 모두에게 index를 줄 수가 없다.
현재 사용하고 있는 모든 글자에 index를 준다고 해도,
시간이 지나서 새로운 글자가 추가 되어 index가 모자르게 된다면 어떻게 할것인가?
그래서 유니코드는 완전한 글자를 제공해 주기도 하지만,
글자를 조립할 수 있도록 조립가능한 글자를 제공해 준다.
다시 "가"를 쓴다고 해 보다.
"가"라는 글자는 1개이지만, 실제로는 초성 "ㄱ"과 중성"ㅏ" 가 합쳐져서 만들어진 글자이다.
그러므로 "가"를 표현하는 방법은 완성된 글자 "가"0xAC00가 될 수도 있고,
초성"ㄱ"과 중성"ㅏ"를 조립한 "가"0x1100,0x1161 로 나타낼 수도 있다.
( 초성 "ㄱ"은 0x1100 - HANGUL CHOSEONG KIYEOK )
( 중성 "ㅏ"는 0x1161 - HANGUL JUNGSEON A )
이를 조합할 수 있게 해 주는 index는 1100 부터 있다.
( Hangul Jamo - Korean combining alphabet - http://www.unicode.org/charts/PDF/U1100.pdf )
이는 비단 한글뿐만 아니라,
일본어 역시 완성된 글자가 있기도 하고, 조합할 수 있게도 되어 있다.
영어 역시 그렇다. 영어에서 무슨 글자를 조합하냐 라고 말하겠지만,
이력서를 나타내는 Resume 의 경우에는 e 와 ' 의 조합으로 이루어 질 수도 있다.
참고 URL http://blog.ggaman.com/896
'애자일(Agile)개발방법론' 카테고리의 다른 글
[ETC] 오픈소스 라이센스 정리 (GPL, LGPL, BSD, MIT 이란?) (0) | 2015.03.09 |
---|---|
[1] 애자일 개발 방법이란? (애자일 Overview, 미신) (0) | 2015.03.02 |
[4] C# 개발 표준(코딩 규칙) MS 권장 (0) | 2015.02.26 |
[3] C# 프로그램 권장하는 구조 (0) | 2015.02.26 |
[2]개발 표준-Capitalization Conventions (0) | 2015.02.23 |