Windows_/Windows32_API

Windows :: 문자셋 종류, MBCS, WBCS

sosal 2014. 7. 24. 09:58
반응형

/*

 * http://sosal.kr/

 * made by so_Sal

 */




문자셋의 종류와 특성

SBCS  (Single byte Character set)
문자를 표현하는데 1바이트 사용. - ASCII Code

MBCS (Muiti Byte Character Set)
한글은 2바이트, 영문은 1바이트 - Multi : 문자열의 종류에 따라 다른 크기를 가진다.

WBCS (Wide Byte Character Set)
문자를 표현하는데 2바이트 사용. - UNICODE
안정적이기 때문에 많이 사용한다.

#include<stdio.h>
#include<string.h>

int main(void){
     char str[] = "ABC한글";
     int size = sizeof(str);
     int len = strlen(str);

     printf("배열의 크기 : %d\n",size);                 // 배열의 크기 : 8
     printf("문자열 길이 : %d\n",len);                   // 문자열 길이 : 7

     return 0;
}

배열의 크기 : ABC ( 1 * 3 ) +  한글 ( 2 * 2)  + NULL = 8
문자열 길이 : ABC ( 1 * 3 ) +  한글 ( 2 * 2)        =      7

문자열의 길이는 우리가 보기엔 5인데 (ABC한글) 출력결과는 7이네요.
실제로 5입니다. 이부분에서 MBSC에서는 문제가 생기게 됩니다.


WBCS 기반의 프로그래밍

WBCS를 위한 2가지
1. char 를 대신하는 wchar_t (wide character 자료형)
2. "ABC" (ASCII Code)를 대신하는 L"ABC" (UNICODE) // L :: 뒤에 오는 문자열을 UNICODE로..
ex) wchar_t str[] = L"ABC";        // char str[] = "ABC";

그리고 Wide character에는 strlen으로 길이를 젤 수 없습니다.
읽어가는 문자 자료형이 다르기 때문에, WBCS 기반의 문자열 조작 함수를 사용해야합니다.

 







하지만 이렇게 MBCS, WBCS 등 나눠서
함수를 쓰게되면 이걸 계속 참조하여 쓰기는 힘들게 되겠죠.
일반적으로 쓰는 ASCII CODE와 UNICODE를
지원하게 하는 방법이 있습니다.
이 내용은 다음글에서 봅시다.

참고도서 : 윈도우즈 시스템 프로그래밍 | 윤성우 저 | 한빛미디어