유니코드 5

멀티바이트(Multibyte), 유니코드(Unicode), ANSI 그리고 ASCII

먼저 "유니코드와 멀티바이트를 비교하라" 는 질문을 받았고 간단하게 대답을 하려면 멀티 바이트는 문자를 다양한 바이트로 표현하는 인코딩 방식 유니코드는 세계 모든 문자를 2바이트 길이의 바이너리(=코드)와 매핑해놓은 코드표(=문자열 셋)이다(예를 들어 '가' 라는 문자를 U+AC00 이런식의 코드에 매핑) 이렇게 대답하면 좋을 것 같다. 앞서 유니코드와 멀티바이트를 비교 하려고 하는데 엄밀히 이야기하면 비교 대상이 잘못됐다. 명확한 비교는 WBCS과 MBCS(흔히 말하는 멀티바이트)를 비교해야한다(유니코드가 WBCS의 형태라서 이렇게 통상적으로 비교하는 듯 하다). 먼저 문자열 셋(Chracter Set)과 인코딩에 대한 이해가 필요하다. 문자와 바이너리를 매핑시켜주는 표를 문자열 셋(Character ..

공부/그 외 2022.09.23

인코딩 변환 함수(MultiByteToWideChar(), WideCharToMultiByte())

출처에 표시해놓은 블로그에서 유니코드멀티바이트 변환 함수를 잘 정리해놓아서 출처를 밝히고 여기 옮긴다. MultiByteToWideChar()함수와 WideCharToMuliByte()함수를 사용해서 인코딩을 변환해 주는 것도 가능합니다. 이 두함수는 윈도우에서만 지원합니다. 따라서 OS 디펜던시가 없는 라이브러라 같은 것을 개발하신다면 이 두함수는 사용하실 수 없긴 하지만 많은 윈도우 개발자들이 사랑하는 함수죠. 먼저 MBCS를 UTF-16으로 바꾸는 함수입니다. int MultiByteToWideChar( UINT CodePage, // 원본 스트링의 현재 인코딩 상태 DWORD dwFlags, // 0을 쓰면 된다. LPCSTR lpMultiByteStr, // 변환하려는 문자열 int cbMult..

공부/WINAPI 2021.12.10

Visual Studio 문자 집합 사용(유니코드, 멀티바이트)

다른게 없고 그냥 전처리기에서 유니코드 관련 매크로(ex. TEXT, TCHAR 등)을 사용했을때 멀티바이트 문자열(char로 선언된 문자열)을 유니코드 문자열(wchar로 선언된 문자열)로 변환해줄건지, 그대로 리턴할건지에 정해줄 뿐이다. 문자 집합을 유니코드 문자 집합 사용을 쓰던, 멀티바이트 문자 집합을 사용을 쓰던, char는 멀티바이트를 담는 타입, wchar는 유니코드를 담는 타입이라는 사실은 변함 없다.

공부/그 외 2021.12.08

멀티 바이트/유니코드 문자열 만들어주기(sprintf_s, wsprintf)

실수 타입은 유니코드 문자열로 만들 수 없으므로 멀티 바이트 문자열로 만들어줘야 하는데 그때 사용할 수 있는 함수가 sprintf_s 함수이다. 오버로드된 다른 형태도 있다. 나의 경우 이렇게 사용해줬다. char FPSText[32] = {}; // 2번째 인자를 멀티 바이트 문자열 형태로 1번째 인자에 저장해준다 // GetFPS() 함수는 float타입을 리턴하는 함수 sprintf_s(FPSText, "FPS : %.5f", m_Timer->GetFPS()); 다른 타입들(ex. 정수형) 들은 wsprintf 함수로 유니코드 문자열로 만들어줄 수 있다. TCHARBulletCountText[32] = {}; // 두번째 인자로 첫번째 인자에 유니코드 문자열을 만들어주는 함수 wsprintf(Bul..

공부/WINAPI 2021.08.20