[윈도우 시스템 프로그래밍]

[윈도우즈 시스템 프로그래밍] 아스키코드 vs 유니코드

회색세계 2019. 4. 2. 23:24

1. Windows에서의 유니코드

 문자셋(Character Sets)의 종류와 특성

  아스키코드 : 1바이트(7비트 + 1비트)를 사용. 256 개의 문자를 사용할 수 있음.

  유니코드    : 2바이트를 사용. 65536개의 문자를 사용할 수 있음.

 

 문자셋의 3가지 종류

  SBCS(Single Byte Character Set) : 1바이트만을 사용하는 방식(아스키코드 기반 문자열)

  MBCS(Multi Byte Character Set) : 1바이트와 2바이트를 혼용해서 사용하는 방식(아스키코드 + 유니코드)

  WBCS(Wide Byte Character Set) : 2바이트만을 사용하는 방식(유니코드 기반 문자열)

 

 WBCS 기반의 프로그래밍

  char 자료형 대신 wchar_t 사용 : wchar_t는 2바이트를 사용(typedef unsigned short wchar_t)

  "ABC"를 대신하는 L"ABC"       : wchar_t str[] = L"ABC" 방식으로 사용

  strlen을 대신하는 wcslen        : 유니코드 기반의 문자열 함수를 사용

    ex) strlen : size_t wcslen(const wchar_t* string)

         strcpy : wchar_t* wcscpy(wchar_t* dest, const wchar_t* src)

         strncpy : wchar_t* wcsncpy(wchar_t* dest, const wchar_t* src, size_t cnt)

         strcat : wchar_t* wcscat(wchar_t* dest, const wchar_t* src)

         strncat : wchar_t* wcscat(wchar_t* dest, const wchar_t* src, size_t cnt)

         strcmp : int wcscmp(const wchar_t* s1, const wchar_t* s2, size_t cnt)

         strncmp : int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t cnt, size_t cnt)

         printf : int wprintf(const wchar_t* format [, arguemt]...)

         scanf : int wscanf(const wchar_t* format [, arguemt]...)

         fgets : wchar_t* fgetws(wchar_t* string, int n, FILE* stream)

         fputs : int fputws (const wchar_t* string, FILE* stream)

    size_t : typedef unsigned int size_t;

 

wmain 함수에 대한 이해

 

왼쪽의 main에서는 MBCS 기반으로 구성되어 인자로 전달된다.

오른쪽의 wmain에서는 WBCS 기반(유니코드)으로 구성되어 인자가 전달된다.

 

참고: 뇌를 자극하는 윈도우즈 시스템 프로그래밍. 윤성우 저