본문 바로가기
dev, tech/Windows P

유니코드(Uncode)

by 구띵 2006. 2. 13.

유니코드

아스키 문자 인코딩을 확장한 것.

 

 - 아스키 : 각 문자를 표현하기 위해 7비트를 사용하는 반면(컴퓨터에서는 보통 8비트를 사용함)

   유니코드 : 문자 인코딩을 위해 16비트를 사용한다. - 이로 인해 유니코드는 컴퓨터 통신에서 사용될 수 있는 전세계의 모든 문자(letter)와 표의 문자 (ideograph), 기호(symbol)를 표현할 수 있다. 유니코드는 원래 아스키를 보완하고 운에 따라서는 궁극적으로 아스키를 대체하기 위한 것이었다.

 

운영체제와 프로그래밍 언어에 가장 큰 영향을 주었다.

- 윈도우즈 NT 계열은 처음부터 유니코드를 지원하도록 설계되었으나, 윈도우즈 9X계열은 유니코드를 위한 지원이 미약하다.

- ANSI C 에서는 와이드 문자 지원을 통해 본래부터 유니코드를 지원한다.

 

DBCS와 유니코드

 

유니코드는 와이드 문자(wide characters)를 사용한다고 한다(특히, C 프로그래밍 언어의 맥락에서).  유니코드의 모든 문자는 8비트 폭이 아닌 16비트 폭이다. 유니코드에서 8비트 값은 아무 의미가 없다. 이와 대조적으로 DBCS에서는 여전히 8비트 값을 다룬다. DBCS에서 일부 바이트는 문자 자체를 나타내지만, 일부 바이티는 또 다른 바이트가 뒤따라 와야만 하나의 문자를 나타낼 수 있다.

 

DBCS 문자열로 작업하는 것은 굉장히 성가시지만, 유니코드로 작업하는 것은 일상적인 텍스트로 작업하는 것과 유사하다.  유니코드 문자의 처음 128개는 아스키고, 그 다음 128개는 아스키의 확장이다. 마찬가지로 유니코드 내의 다양한 문자 블록은 현존하는 표준에 기반한다. 이는 변환을 쉽게 하기 위해서다.

 

유니코드의 가장 좋은 점은 단 하나의 문자셋만 있다는 것이다. 따라서 모호함이 없다.

 

유니코드에도 단점이 있다. 유니코드 문자열은 아스키 문자열의 두배의 메모리를 차지한다. 그러나 가장 큰 단점은 유니코드가 아직까지는 많이 사용되지 않는다는 것이다.

 

 

 

 

int main()
{
     
 char *pc="Hello!";

 wchar_t *pw = L"Hello!"; // 대문자 L(long을 뜻함) : 문자열이 와이드 문자로 저장되도록(모든 문자가 2바이트를 차지하도록 컴파일러에 지시) -> 포인터 변수 p는 4바이트 필요, 문자열은 14바이트 필요(각 문자별 2바이트 + 널문자 2바이트)

 

 int iLength = wcslen(pw);// strlen()의 와이드 문자 버전(STRING.H와 WCHAR.H)

                                          리턴 값은 6이다.와이드 문자를 사용하더라도 문자열의 길이는 변하지 않고, 바이트 길이가 변하게 된다.

 

 int jLength = strlen(pc);

 printf("%d\n", iLength);
 
 printf("%d\n", jLength);


 return 0;
}

 

 

C런타임 라이브러리 함수 중 문자열을 인자로 취하는 모든 함수에는 와이드 문자 버전이 있다.

 

그러므로, 원하는 결과를 얻기 위해서는 이미 작성되어 있는 와이드 문자 버전 함수를 취하여 사용하기만 하면 된다. (문자열을 인자로 취하는 함수에 대해서만)

 

'dev, tech > Windows P' 카테고리의 다른 글

WinMain 에서 하는 일...  (0) 2006.03.04
aa  (0) 2006.02.14
Windows 서비스  (0) 2006.01.25
일단 용어 정리  (0) 2006.01.19
이벤트(event)  (0) 2006.01.18

댓글