개인 공부/윈도우즈 시스템 프로그래밍

02: 아스키코드와 유니코드

chaeD2 2022. 4. 1. 21:37

01. Windows에서의 UNICODE

문자셋의 종류, 특성: 미국 정의 표준이고 1바이트로 표현되는 아스키코드, 2바이트로 표현되는 유니코드가 있다.

SBCS: Single Byte Character Set, 문자를 표현하는 데 1바이트 사용

MBCS: Multi byte Character Set, 어떤 문자는 1바이트로 어떤 문자는 2바이트로 사용

WBCS: Wide Byte Character Set, 모든 문자를 2바이트로 처리

 

01-1. WBCS, 유니코드 기반의 프로그래밍

char -> wchar_t

"ABC" -> L"ABC"

strlen -> wcslen

널 문자도 2바이트로 처리된다.

MBCS 방식을 지원하기 위한 main 함수가 존재한다면, 유니코드 방식을 지원하기 위한 wmain이 존재한다. 그리고 이 두 가지 방식을 모두 지원하기 위해 _tmain이 존재한다. 프로그램 실행 시 전달되는 문자열을 MBCS/SBCS 각각 다른 기반으로 구성한다.

 

02. MBCS와 WBCS의 동시 지원

유지보수, 배포에 많은 불편함 -> 버그로 이어질 소지

 

02-1. Windows 스타일 자료형

#include <windows.h>

typedef char CHAR;

typedef wchar_t WCHAR;

#define CONST const

typedef CHAR* LPSTR;

typedef CONST CHAR* LPCSTR;

typedef WCHAR* LPWSTR;

typedef CONST WCHAR* LPCWSTR;

 

02-2. MBCS와 WBCS 동시 지원 매크로

#ifdef UNICODE

 typedef WCHAR TCHAR;

...

#else

 typedef CHAR TCHAR;

...

#endif

 

02-3. MBCS와 WBCS를 동시 지원하는 함수들

#ifdef _UNICODE

 #define _tprintf wprintf

#else

 #define _tprintf printf

#endif