원본 : http://www.debuglab.com/knowledge/unicodembcs.html
1.요약
각각의 차이점을 짧게 소개하고, 사용시 주의점을 살펴봅니다.
2.본문
문자열 세트를 나타내는 각각의 용어에는 다음과 같은 뜻이 있습니다.
[Unicode] 2바이트가 하나의 문자를 나타내며, 세계 각국의 언어를 동일한 코드로 표현할 수 있습니다. Windows NT/2000 운영체제는 내부적으로 Unicode를 사용하고 있습니다. 그렇기 때문에 API 호출시에 Unicode 를 사용한다면 보다 효율적입니다. C++에서는 wchar_t 타입을 사용합니 다.
[MBCS/DBCS] 하나의 문자를 나타내기 위해서 한 바이트 이상이 사용됩니다. DBCS는 한 바이트 혹은 두 바이트가 하나의 문자를 나타내는 MBCS의 특수한 경우입니다.
C++ 에서는 unsigned char 타입을 사용합니다.( 보통은 char를 사용하는 것 같습니다)
[ANSI] 한 바이트로 하나의 문자를 나타내는 코드입니다. C++ 에서는 char 타입을 사용합니다.
[TCHAR] char 혹은 wchar_t가 될 수 있는 매크로 입니다.
-------------------------------------------------------------------
Unicode를 사용해서 프로그램을 작성하는 것은 다음과 같은 장단점이 있습니다.
장점 - Windows NT/2000에서, 보다 효율적이다.
단점 - Windows 9X 에서 실행되지 않는다.
MBCS/ANSI를 사용해서 프로그램을 작성하는 것은 다음과 같은 장단점 이 있습니다.
장점 - Windows 9X/NT/2000 에서 다 돌아간다.
단점 - Windows NT/2000 에서, 보다 비효율적이다.
------------------------------------------------------------------
즉, 상황에 맞는 선택이 필요한 것인데, 그렇다고 상황이 변할때 마다 코드를 재작성 할 수는 없는 일이기에 TCHAR 라는 매크로를 사용하기에 이르렀습니다.
TCHAR는 평소에는 char로 활약하다가 유사시에는 wchar_t가 되는 매크로입니다.
관련된 내용은 훌륭한 서적/참고 자료가 많이 있으므로 생략하고 간단한 참고 자료를 제시하겠습니다.
-----------------------------------------------------------------
프로젝트에서 UNICODE 혹은 _UNICODE라는 심볼이 미리 정의되는 경우 TCHAR는 wchar_t로 돌변합니다. 물론 이는 아주 단적인 예이고, 올바르게 표현하자면 다음과 같이 될 것입니다.
UNICODE 가 미리 정의된 경우 winnt.h에서 다음의 매크로는 화살표에 이끌려 다음과 같이 정의됩니다.
우리가 알아야 할 것은 두 가지 모두 정의해야 한다는 점입니다.
------------------------------------------------------------------
_MBCS가 미리 정의된 경우 다음의 매크로는 화살표에 이끌려 다음과 같이 정의됩니다.
물론 위의 내용은 타입이나 리터럴의 경우만 언급한 것이고, 함수들 예를 들어, _tcscat 이 _strcat 또는 wcscat 또는 _mbscat 등으로 바뀌는 일도 발생합니다.
3.예제
4.참고
ATL Internals
- 2001.08.13 Smile Seo -
1.요약
각각의 차이점을 짧게 소개하고, 사용시 주의점을 살펴봅니다.
2.본문
문자열 세트를 나타내는 각각의 용어에는 다음과 같은 뜻이 있습니다.
[Unicode] 2바이트가 하나의 문자를 나타내며, 세계 각국의 언어를 동일한 코드로 표현할 수 있습니다. Windows NT/2000 운영체제는 내부적으로 Unicode를 사용하고 있습니다. 그렇기 때문에 API 호출시에 Unicode 를 사용한다면 보다 효율적입니다. C++에서는 wchar_t 타입을 사용합니 다.
[MBCS/DBCS] 하나의 문자를 나타내기 위해서 한 바이트 이상이 사용됩니다. DBCS는 한 바이트 혹은 두 바이트가 하나의 문자를 나타내는 MBCS의 특수한 경우입니다.
C++ 에서는 unsigned char 타입을 사용합니다.( 보통은 char를 사용하는 것 같습니다)
[ANSI] 한 바이트로 하나의 문자를 나타내는 코드입니다. C++ 에서는 char 타입을 사용합니다.
[TCHAR] char 혹은 wchar_t가 될 수 있는 매크로 입니다.
-------------------------------------------------------------------
Unicode를 사용해서 프로그램을 작성하는 것은 다음과 같은 장단점이 있습니다.
장점 - Windows NT/2000에서, 보다 효율적이다.
단점 - Windows 9X 에서 실행되지 않는다.
MBCS/ANSI를 사용해서 프로그램을 작성하는 것은 다음과 같은 장단점 이 있습니다.
장점 - Windows 9X/NT/2000 에서 다 돌아간다.
단점 - Windows NT/2000 에서, 보다 비효율적이다.
------------------------------------------------------------------
즉, 상황에 맞는 선택이 필요한 것인데, 그렇다고 상황이 변할때 마다 코드를 재작성 할 수는 없는 일이기에 TCHAR 라는 매크로를 사용하기에 이르렀습니다.
TCHAR는 평소에는 char로 활약하다가 유사시에는 wchar_t가 되는 매크로입니다.
관련된 내용은 훌륭한 서적/참고 자료가 많이 있으므로 생략하고 간단한 참고 자료를 제시하겠습니다.
-----------------------------------------------------------------
프로젝트에서 UNICODE 혹은 _UNICODE라는 심볼이 미리 정의되는 경우 TCHAR는 wchar_t로 돌변합니다. 물론 이는 아주 단적인 예이고, 올바르게 표현하자면 다음과 같이 될 것입니다.
UNICODE 가 미리 정의된 경우 winnt.h에서 다음의 매크로는 화살표에 이끌려 다음과 같이 정의됩니다.
TCHAR --> wchar_t TEXT,__TEXT --> L_UNICODE가 미리 정의된 경우 tchar.h에서 다음의 매크로는 화살표에 이끌려 다음과 같이 정의됩니다.
TCHAR --> wchar_t _T,__T,_Text --> L쉽게 얘기해서 UNICODE는 SDK에서 쓰는 것이고 _UNICODE는 CRT에서 사용하는 것입니다.
우리가 알아야 할 것은 두 가지 모두 정의해야 한다는 점입니다.
------------------------------------------------------------------
_MBCS가 미리 정의된 경우 다음의 매크로는 화살표에 이끌려 다음과 같이 정의됩니다.
TCHAR --> char _T,__TEXT --> 사라짐위에서 언급한 무엇도 정의되지 않은 경우 다음의 매크로는 화살표에 이끌려 다음과 같이 정의됩니다.
TCHAR --> char _T, __TEXT --> 사라짐------------------------------------------------------------------
물론 위의 내용은 타입이나 리터럴의 경우만 언급한 것이고, 함수들 예를 들어, _tcscat 이 _strcat 또는 wcscat 또는 _mbscat 등으로 바뀌는 일도 발생합니다.
3.예제
4.참고
ATL Internals
- 2001.08.13 Smile Seo -
"ATL/COM" 카테고리의 다른 글
- ActiveX를 무조건 다운로드 하게 하기 (0)2007/03/15
- String Conversion Macro (0)2007/03/08
- Unicode/MBCS(DBCS)/ANSI/TCHAR (0)2007/03/05
- [ATL] 새로운 인터페이스 추가하기 (0)2007/03/05
- COM 형식 라이브러리 사용하기 (0)2007/01/05

수안이의 컴퓨터 연구실



Leave your greetings.