본문 바로가기

Programming/API

멀티바이트와 유니코드

winapi.co.kr(현 http://www.soen.kr/)의 강좌를 보다보면 코드에 자주 오류가 뜨곤 한다.

그 이유는 강좌 제작 당시 사용되었던 Visual Studio 6.0은 유니코드는 지원하지 않고, 멀티바이트만 지원하였고 Visual Studio 2005 이후로는 기본적으로 UNICODE를 지원하기때문인데 윈도우 2000 이상에서는 유니코드를 지원하고, 윈도우98은 유니코드를 지원하지 않았기때문이다.

멀티바이트는 한 문자에 할당되는 공간이 일정하지 않은데 영어는 1바이트, 다국어 2바이트 공간을 확보하고 유니코드는 항상 문자 하나에 2바이트 공간을 확보한다.

문자집합 부분 설정을 멀티바이트로 바꿔주게되면 오류는 발생하지는 않지만,

유니코드로 프로그래밍을 하게되면 외국어 윈도우에서도 한글이 깨지지 않고, 다국어 버전이 많들기 쉽다는 장점들이 있어서 유니코드로 프로그래밍 하는 것이 좋다고들 한다.

그래도 호환성을 위해 환경에 맞게 유니코드, 멀티바이트 변환되는 TCHAR타입을 사용하는 것이 좋다.

문자열같은경우에도 멀티바이트에서는 char str = "문자열"; 이렇게 입력했다면 유니코드에서는 wchar_t = L"문자열"; 이런 형식으로 입력해줘야 한다. TCHAR str = TEXT("문자열"); 이렇게 입력하면 컴파일 환경에 따라  바뀌게 된다.

함수들 같은경우에는 다음과같다. TCHAR타입을 사용하기 위해서는 #include<tchar.h>를 입력해줘야한다.

 멀티바이트(MBCS)

 유니코드(WBCS)

 TCHAR타입

 strlen

 wcslen

 _tcslen

 strcpy

 wcscpy

 _tcscpy

 strncpy

 wcsncpy

 _tcsncpy

 strcat

 wcscat

 _tcscat

 strncat

 wcsncat

 _tcsncat

 strcmp

 wcscmp

 _tcscmp

 strncmp

 wcsncmp

 _tcsncmp

 printf

 wprintf

 _tprintf

 scanf

 wscanf

 _tscanf



'Programming > API' 카테고리의 다른 글

WM_CHAR 메시지와 WM_KEYDOWN 메시지  (0) 2013.08.08
가상키코드  (0) 2013.08.08
IME를 사용해서 한글입력기를 만들잣!  (0) 2013.08.06
메세지 박스  (0) 2013.08.05
char*, LPCTSTR, TCHAR 의 차이  (0) 2013.07.25