About Unicode



■ 문자 인코딩 (Character encoding)
   문자들의 집합을 컴퓨터에 저장하거나 통신에 사용할 목적으로 부호화 하는 방법.
   ex). 모스 부호
          라틴, 알파벳, 숫자, 특수문자 → 정수 및 7bit 이진수 로 변환 (ASCII 문자열 셋트)


■ 문자 집합(Character set, charset)
   문자 집합(문자 셋) 은 정보를 표현하기 위해 글자들의 집합을 정의 한 것
   ex) ASCII 문자열 셋
   ※ 일반적으로 "어떤 문자를 사용할 수 있으며, 어떤 식으로 표현 되는지를 나타낸다는데" 있어서의 의미로
      "문자 집합" = "문자 인코딩" 동의어로 취급 되기도 함.


■ 문자 집합의 변화
ANSI → DBCS → Unicode

1. ANSI 문자
   - ASCII 코드 (문자열 셋) 을 사용.
   - 하나의 문자를 표현 하는데 1Byte 를 사용.
   - 문자열의 끝이 0 으로 끝나는 1Byte 문자. 
   - 1Byte 는 256 가지 문자를 표현
   
      ※ 문제점
          - 전세계의 모든 문자를 1Byte 로 표현할 수 없음.



2. DBCS (Double Byte Character Set)
   - 하나의 문자를 표현 하는데 1Byte 또는 2Byte 사용. (즉, 고정된 크기로 표현하지 않음)
   - ex). 일본의 간지의 경우, 첫번째 문자가 0x81 ~ 0x9F 또는 0xE0 ~ 0xFC 범위 안에 있으면
            하나의 문자를 결정 짓기 위해 그 다음 Byte 까지 확인 해야 한다.

      ※ 문제점 
          - 하나의 문자를 표현 하는데 어떤 경우는 1Byte, 어떤 경우는 2Byte 로 표현 된다는 것은
            인코딩 방법에 있어 불편함을 초래 한다.
       ※ 윈도우 함수와 C 런타임 라이브러리 함수는 더이상 DBCS를 지원하지 않는다.


3. Unicode
   - 전세계 모든 문자를 컴퓨터에서 표현할 수 있도록 만든 정수 테이블
   - 유니코드의 재정 의도
         - 기존의 인코딩 등른 그 규모나 범위 면에서 한정되어 있고, 다국어 환경 에서는 서로 호환되지 않는 문제점 갖는다.
         - 현존하는 문자 인코딩 방법들을 모두 유니코드로 교체 하는 것.
   - 유니코드 에는 "문자집합  + 문자 인코딩 + 문자 정보 데이터 베이스 + 문자를 다루기 위한 알고리즘" 이 포함되어 있다.




■ Unicode 를 이용한 문자 인코딩 방법

1. UTF-8

   - 하나의 문자를 나타내기 위해 1, 2, 3, 4Byte 로 인코딩을 수행
   - 문자가 0x0080 미만에 있다면 해당 문자는 1Byte 로 인코딩 됨. (영어 문자 인코딩의 최적)
   - 문자가 0x0080 ~ 0x07FF 범위에 있다면 2Byte 로 인코딩 됨. (유럽 및 중동의 언어에 최적)
   - 문자가 0x0800 이상의 문자들은 3Byte 로 인코딩 됨. (주로 동아시아 언어에 최적)
   - 그 외에는 4Byte 로 인코딩 됨. 
   - 일반적인 인코딩 방법 이지만 0x0800 이상의 문자를 많이 사용할 경우 비효율적 이다.

2. UTF-16  
   - Wide Character 라고 불리기도 함.
   - 각 문자를 2Byte 로 인코딩 함.
   - 전세계의 대부분의 언어가 16bit (2Byte) 로 표현이 가능 하기 때문에 Windows 는 UTF-16을 사용. (Windows Vista 역시)
   - 몇몇 소수 언어들은 16bit 로 표현하기 충분하지 않기때문에 UTF-16 에 대응하는 32bit 인코딩 방법도 존재
   - UTF-16 은 공간 절약과 코딩의 편의성 사이의 적절한 절충안
   - .Net 프레임워크의 경우 모든 문자를 UTF-16 으로 인코딩 함.

3. UTF-32
   - 모든 문자를 4Byte 로 인코딩 함.
   - 모든 언어에 대해 문자 변환 알고리즘을 간단히 구성하려 할 때나 가변 길이의 인코딩 방식을 사용하고 싶지 않은 경우에
      유용.
   - UTF-32 를 사용하면 모든 문자가 4Byte 이므로 다른 대안에 대해 고려할 필요가 없다.
   - 메모리 사용에 있어 매우 비효율적인 인코딩 방식.
   - 파일 저장 방식이나, 네트워크를 통한 전송 방식으로는 거의 사용되지 않음.
   - 보통 프로그램 내부에서만 사용






cf) Windows VIA C/C++  - 한빛 미디어, 위키백과
Posted by six605
,