SBCS ( Single Byte Character Set )
: 1바이트만 사용 하는 문자
: 예 - 아스키코드(ASCII Code)
MBCS ( Multi Byte Character Set )
: 한글은 2바이트, 영문은 1바이트를 사용하는 문자
: 예 - EUC-KR, CP949 등
WBCS ( Wide Byte Charater Set )
: 2바이트만 사용!
: 예 - 유니코드(Unicode)
일반적으로 사용하는 char, strlen은 SBCS 기반의 함수
wchar_t 는 WBCS 기반의 변수 즉 2바이트이다.
즉, 문자열 사용시 고려해주지 않으면 오류가 난다.
wchar_t str[] = "ABCD가나다라";
// 오른쪽은 MBCS 기반의 문자자료형 왼쪽은 유니코드 기반의 문자자료형
// 오른쪽 문자열 앞에 L을 붙여주면 WBCS 기반의 문자열로 표현하게 된다.
// 즉 한, 영 모두 2바이트
wchar_t str[] = L"ABCD가나다라";
// 수정된 코드
// but. strlen을 쓰려고 하면 오류가 난다.
// 문자열은 WBCS 이지만 함수는 SBCS이기 때문(char을 인수로 받는다)
// 따라서 SBCS 기반의 함수가 아닌 WBCS 기반의 문자열 함수를 이용해야한다.
SBCS 기반의 함수 |
WBCS 기반의 함수 |
strlen strcpy strcat strcmp . printf scanf |
wcslen wcscpy wcscat wcscmp . wprintf wscanf |
* _wsetlocale(LC_ALL, L"korea"); - 유니코드 기반으로 한글을 출력할 때 꼭 호출해 주어야 하는 함수.
- 이 함수를 통해 각 나라의 언어로 표현할 수 있게 된다.
Q MBCS 기반의 프로그램을 만들다가 WBCS 기반의 프로그램으로 바꾸려면 ?
: (1) 일일히 문자열 앞에 L을 붙이고 SBCS 기반의 함수를 WBCS 기반의 함수로 바꾸어 준다.
BUT. 비효율적, 큰 프로젝트 일수록 수정이 힘들어 진다.
: (2) TCHAR 등 따로 정의된 변수명을 이용한다.
출처 및 자세한 사항 : http://blog.eairship.kr/217