자세한 내용은 관련 사이트 연결을 명시한 참고3을 보시면 됩니다.

기존에 각 나라별 문자별 인코딩에 따라 문자열 처리에 통일성이 없었습니다. 이를 해결하기 위해 UNICODE 가 소개 되었습니다. UNICODE 만을 지원한다면 두가지를 염두해 둘 필요는 없지만, 아직은 과도기적 단계로 기존 문자열 처리들도 신경 써 줘야 합니다. (참고3의 3번 링크를 보면 Win9x 에서는 UNICODE 기반 프로그램이 실행되지 않는다는 것을 알 수 있습니다.) 이에 두 방식의 문자열을 지원하기 위한 방법을 간단하게 요약 해 보았습니다. (자세한 내용은 참고3의 1번 링크 참조)

1. 문자(열) 변수 타입은 T 타입으로 씁니다.
char -> TCHAR, char* -> LPTSTR, const char* -> LPCTSTR

2. 문자열 리터럴은 __TEXT(TEXT 도 가능) 또는 __T(_T, _TEXT 도 가능) 매크로로 묶어 둡니다. (아래 참고내용 참고)

3. CRT 문자열 함수는 T 타입 함수를 사용합니다. 기존 문자열 함수의 pre-fix, "str" 을 _tcs 로 바꾼다. pre-fix 가 str 이 아닌 경우는 그냥 _t 를 붙입니다.
예1) _tcscpy, _tcsncpy, _tcscat, _tcsstr, _tcsshr, _tcsrchr, _tcscmp, _tcsicmp
예2) _tmkdir, _tfopen

4. 길이와 크기를 구분합니다. 기존의 char 의 경우 그 크기가 1바이트이어서 크기 값과 길이 값이 같아 혼용하는 경우가 많았습니다. 하지만 UNICODE 환경에서는 크기가 달라지므로, 혼용해서 쓰는 일이 없어야 하겠습니다.

5. string 클래스 사용하기
std::string 의 경우는 ANSI 문자열, std::wstring 의 경우는 UNICODE 문자열을 지원하는 문자열 클래스입니다. 허나 둘을 구분하여 지원하는 tstring 은 존재하지 않아 구현하여 써야 합니다. std::string 은 std::basic_string, std::wstring 은 std::basic_string 로 구현되었습니다. 이에 따라, std::tstring 은 다음과 같이 구현할 수 있습니다.
namespace std { typedef basic_string tstring; }

6. 일부 함수나 메세지 인자의 경우 특정 문자열(char 또는 wchar_t)로 취급해야 하는 경우에는 전처리기를 이용하여 처리합니다. 이 때, 당장은 신경써도 되지 않는 구현 부는 필요 시 수정이 필요한 부분을 쉽게 찾기 위하여 error 전처리기를 사용합니다.
#ifdef _UNICODE
// UNICODE 처리
#else
#error 이 프로그램은 MBCS 빌드로 컴파일되지 않습니다.
#endif



참고1 (TEXT 매크로 관련 헤더 내용 요약, 참고3의 2번에도 간략하게 명시됨)
<tchar.h>
#ifdef _UNICODE
#define __T(x) L ## x
#else
#define __T(x) x
#endif
#define _T(x) __T(x)
#define _TEXT(x) __T(x)

<winnt.h>
#ifdef UNICODE
#define __TEXT(quote) L##quote
#else
#defin __TEXT(quote) quote
#endif
#define TEXT(quote) __TEXT(quote)

참고2 (필자가 직접 쓰고 있는 tstring)
//-------------------------------------------------------------------------
#pragma once
//-------------------------------------------------------------------------
#include <windows.h>
#include <string>
#include <tchar.h>
//-------------------------------------------------------------------------
namespace std
{
typedef basic_string<_TCHAR> tstring;
}
//-------------------------------------------------------------------------

참고3 (관련 사이트 연결)
1. 유니코드에 대비한 프로그램을 작성하는 여섯가지 원칙 (신영진님의 글)
2. Win32 API에서의 MBCS 와 Unicode (TCHAR 와 _T 매크로의 소개)
3. Unicode/MBCS(DBCS)/ANSI/TCHAR (문자열 세트에 대한 설명)

'Windows > 개발잡담' 카테고리의 다른 글

[Win32] 변수 형 및 접두어 뜻  (0) 2007.09.18
프리젠테이션 - 각종 효과들의 도배  (0) 2006.11.21
표준?  (0) 2006.09.01
어처구니 없는 마케팅  (0) 2006.08.30
IT 직종 바로알고 내 자신도 바로알자  (0) 2006.08.30

+ Recent posts