유니코드 지원
유니코드는 싱글바이트로 표현할 수 없는 문자 집합을 포함하여 모든 문자 집합을 지원하기 위한 사양입니다. 국제 시장을 대상으로 프로그래밍할 경우 유니코드 또는 MBCS(멀티바이트 문자 집합) 중 하나를 사용하거나 스위치를 변경하여 둘 중 하나로 프로그램을 빌드할 수 있도록 설정합니다.
와이드 문자는 2바이트 다국어 문자 코드입니다. 전 세계의 현대식 컴퓨팅 환경에서 사용되는 대부분의 문자(전문 기호 및 특수 출판 문자 포함)는 유니코드 사양에 따라 와이드 문자로 표현될 수 있습니다. 한 개의 와이드 문자로 표현할 수 없는 문자는 유니코드의 대리 기능을 사용하여 유니코드 한 쌍으로 표현할 수 있습니다. 각 와이드 문자는 항상 16비트 고정 크기로 표현되기 때문에 와이드 문자를 사용하면 국가별 문자 집합을 사용한 프로그래밍을 단순화할 수 있습니다.
와이드 문자열은 wchar_t[] 배열로 표현되고 wchar_t* 포인터가 가리킵니다. 모든 ASCII 문자는 문자 앞에 문자 L을 접두사로 사용하여 와이드 문자로 나타낼 수 있습니다. 예를 들어, L'\0'은 종료 와이드(16비트) NULL 문자입니다. 마찬가지로 모든 ASCII 문자열 리터럴은 ASCII 리터럴 앞에 문자 L을 접두사로 사용하여(예: L"Hello") 와이드 문자열 리터럴로 나타낼 수 있습니다.
일반적으로 와이드 문자는 멀티바이트 문자보다 메모리 공간을 더 많이 차지하지만 처리 속도는 더 빠릅니다. 또한 멀티바이트 인코딩에서는 한번에 한 개의 로캘만을 표현할 수 있지만 유니코드 표현에서는 전 세계의 모든 문자 집합을 동시에 표현할 수 있습니다.
데이터베이스 클래스를 제외하고 MFC 프레임워크 전체에서 유니코드를 사용할 수 있습니다. (ODBC는 유니코드를 지원하지 않습니다.) MFC는 다음 표와 같이 이식 가능한 매크로를 사용하여 완전하게 유니코드를 지원합니다.
MFC의 이식 가능한 데이터 형식
이식할 수 없는 데이터 형식 |
대신 사용하는 매크로 |
---|---|
char |
_TCHAR |
char*, LPSTR(Win32 데이터 형식) |
LPTSTR |
const char*, LPCSTR(Win32 데이터 형식) |
LPCTSTR |
CString 클래스는 기본적으로 _TCHAR를 사용하며 쉽게 변환할 수 있도록 생성자와 연산자를 제공합니다. 유니코드의 문자열 연산은 대부분 Windows ANSI 문자 집합을 처리하는 데 사용하는 동일한 논리로 작성될 수 있습니다. 단, 기본 연산 단위는 8비트 바이트가 아니라 16비트 문자입니다. MBCS(멀티바이트 문자 집합)로 작업할 때와 달리, 유니코드 문자는 별도의 두 바이트인 것처럼 처리해서는 안 됩니다.