<주요 문자셋>
1. ASCII
0x00부터 0x7f까지 128 개의 문자열을 정의한 코드표. 1바이트에 글자 하나를 표현할 수 있으며, 알파벳만이 표현 가능하다.
2. MBCS
아스키로 표현할 수 없는 언어를 사용하기 위한 멀티바이트 문자 집합 (Multi Byte Character Set)을 말한다. KSC5601(완성형 코드)과 같은 코드 페이지를 지칭하며, 하나의 글자는 1바이트나 2바이트로 표현된다.
3. UCS2
Windows 프로그래밍에서 일반적으로 유니코드라고 불리고 있는 표현 방식이며 정확히는 Universal Character Set 의 약자 이며 0x0000부터 0xffff 까지 65536개의 문자를 표현할 수 있다. 유니코드에서는 이를 기본 언어판(BMP Basic Multilingual Plane) 이라고 정의한다.
UCS2 는 글자 하나를 무조건 2바이트로 표현하므로, MBCS 보다 언어를 처리하는데 훨씬 편하며 다국어 처리가 가능하다. UCS2 는 정확히는 유니코드의 모든 것이 아니며 그 중 많이 사용되는 기본 언어만을 모아 놓은 것이다.
4. UTF8 (UCS Transformation Format)
UCS2 는 BMP를 전부 표현 할 수 있지만, 기존의 ASCII 시스템과의 호환성이 없으므로 문제가 많으므로 기존의 ASCII 시스템과 호환이 되면서 BMP를 표현할 수 있는 인코딩 방식이다.
UTF8 은 기본적인 ASCII 는 1바이트를 표현하고, 0x0080~0xffff 까지는 2~3 바이트로 표현하는 방식을 사용한다.
단순히 http 와 같은 ascii 프로토콜에 데이터를 실어서 손쉽게 보낼 수 있으므로 ASCII 호환이 필요한 시스템에서 많이 사용되지만, 문자를 1~3 바이트로 표시하므로 문자열 자체를 다루기는 매우 어렵다. ( 모든 유니코드 영역을 다 표현할 경우 6바이트까지 사용되지만, 실제 정의된 영역을 표시하는데에는 4바이트까지만 사용된다. )
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
( 주 : UTF8 에는 0xff와 0xfe가 나타나지 않으며, 문자열 중간에 0x00 도 나타나지 않는다. )
5. UCS4
문자 하나를 표시하는데 4바이트를 사용한다. 모든 유니코드 언어를 표시할 수 있다.
6. UTF-16
UTF8과 UCS2를 짬뽕한 형태라고 볼 수 있다. 기본적으로 언어 하나를 표시하는데 2바이트를 사용하므로 많은 부분이 UCS2 와 중복된다. ( ASCII 와 UTF-8 의 중복처럼 ) 하지만, UCS2 로 표현불가능한 1백만여자를 더 표시할 수 있다.
7. UTF-32
UCS4 의 부분집합으로 0x00000000~0x0010ffff 만을 사용한다.
UCS4 는 4바이트로 표현 가능한 모든 영역을 사용 가능하지만 UTF-32 는 실제 정의되어 있는 유니코드 영역만을 사용하기로 약속한 인코딩 방식이다. 실질적으로는 둘 다 동일 하다.
8. BOM ( Byte order mark )
유니코드 텍스트 파일 (UCS2, UTF8)이 일반적인 텍스트 파일과 다른 점은 시스템의 ENDIAN에 따라서 텍스트 파일의 저장방식이 바뀔 수 있다는 것이다. 예를 들어서 알파벳 “A”를 UCS2로 저장할 경우 텍스트 파일에는 리틀 엔디안의 경우 0x41 0x00 순서로 저장되고, 빅엔디안 에서는 0x00 0x41 로 저장된다. ( 둘 다 유니코드 표준에 맞다 )
그래서, 일부(MS)에서는 BOM 을 텍스트 파일의 맨 앞에 집어 넣어서 텍스트 파일의 엔디안 방식을 명시적으로 표시하는 방법을 사용한다. 위의 예를 들자면 0xff 0xfe 0x41 0x00 과 같이 맨 앞에 0xff 0xfe 가 있으면 리틀 엔디안으로 인식하는 것이다. ( 빅 엔디안의 경우는 반대로 0xfe 0xff 이다 )
<코드표>
http://www.unicode.org/charts/ : 각 나라별 코드범위와 정의된 문자를 볼 수 있다.
'DENNY's Code Story' 카테고리의 다른 글
| MS 윈도우 라이브 메신저 불통 사고 (0) | 2008/07/26 |
|---|---|
| CPUID 명령을 이용한 CPU 정보 확인 방법 (0) | 2008/07/19 |
| 유니코드에 대해... (0) | 2008/07/19 |
| 실행 결과가 계속 바뀌는 재미있는 그림 C코드 (0) | 2008/07/19 |
| Nvidia의 CUDA (Compute Unified Device Architecture) (0) | 2008/07/19 |
| 프로세스(process)와 스레드(thread) (0) | 2008/07/19 |

