VS 프로젝트 속성 -> 구성속성을 보면

문자 집합으로 2가지를 사용할 수 있다.

1. 멀티바이트 문자 집합

2. 유니코드 문자 집합



아스키 코드(SBCS) - 모든 문자 하나가 1byte를 차지하며 영어를 표현한다. 

하지만 아스키 문자 코드 만으로는 한글이나 일어 등의 다른 문자를 표시할 수 없다.




멀티바이트(MBCS) - 1. 아스키 문자 코드에다가 다른문자(2byte)들을 포함한 문자 집합이다.

어떤 문자는 1byte고, 어떤 문자는 2byte이다.

정확히는 모르겠지만, 한 문자가 2byte를 넘는 문자도 존재할 것이다.


2. 멀티바이트 문자 집합은 특정 문자 집합마다의 코드페이지가 존재한다.

예를 들어, 같은 코드 번호 일지라도 한글 코드 페이지로 해석하면 한글이 나오지만,

일어 코드 페이지로 해석하면 일어가 나온다.

그래서 이상하게 깨지는 문자 등을 우리는 목격할 수 있다.





유니코드(WBCS) - 멀티바이트 2번의 방안으로 탄생한 것이다!

 아스키 문자 코드 뿐만 아니라, 한글, 일어 등등 어떠한 문자들을 총 망라하여

 각 한 문자에 2byte씩으로 할당하여 만든 문자 집합.

 그리하여 각각의 특정 문자는 고유의 유니코드값을 가진다.







코딩 시에는 !! 

게임이 여러 언어를 지원해야할 경우가 있을 시에, 소스 상에서 유연성이 필요하다!!


먼저, 기본적인 습관을 고치도록 하자.


 char

 TCHAR 

 strcat_s( )

 _tcscat_s( )

 strcpy_s( )

 _tcscpy_s( ), _tcsncpy_s( )

 strlen( )

 _tcslen( )

 sprintf_s( )

 _stprintf_s( )


그리고 문자열을 바로 쓸 때,

"" 대신에 TEXT(" ")를 쓰자.


TEXT 매크로는 유니코드의 설정에 따라 상수의 타입을 달리 한다.


예를 들어, 유니코드로 컴파일 할 경우, 

TEST("a")를 16bit(2byte) 문자로 인식하고,

아닐 경우,

8bit(1byte) 아스키 문자로 인식한다.








문자열을 처리하는 기본 자료형은 보통 

char / wchar / TCHAR     사용한다.


아스키코드 char - 영어를 표현하며 모든 문자를 1byte로 구성한다.


유니코드 wchar - 모든 문자를 2byte로 구성한다.

( 영어는 1byte로 되어있으나, 한글을 포함한 다양한 나라의 독특한 언어 표현을 위해 최소 2byte가 필요한데,

멀티바이트를 사용하기도 하지만, 1byte와 2byte로 메모리 관리가 어려워진다.

그래서 사용하는 것이 wchar)



TCHAR - 아스키 타입의 일반 char 또는 유니코드 타입의 wchar 이라는 의미이다.


TCHAR을 사용하면, char인지, wchar인지 구별하지 않고 그냥 코딩할 수 있게 된다.

컴파일러에 유니코드라고 알려주지 않으면 char 로 동작한다.

만약, 나중에 wchar로 사용하려면 컴파일러에 유니코드라고 알려주면 되고, 소스코드는 손대지 않아도 된다.



TCHAR 은 char 인지, wchar 인지 구별하지 않고 코딩할 수 있게끔 해주기 위해 존재한다.


TCHAR 이 어떤건지에 대한 구별은 유니코드라는 precompile 상수를 이용해서 구분하며,

이는 프로젝트 -> 셋팅 에서 _DEBUG 등등이 선언되어 있는 곳 끝에 선언해주면 

TCHAR 은 wchar 로 변환해서 컴파일을 시도한다.



글로벌한 제품 개발을 위해서는 TCHAR 사용이 필수인듯 하다.



+

cf.   UTF-8 ㅇㅣ게 뭔지 체크..




char - string / strcpy( (char), (string).c_str() );    / "세턴"

TCHAR - wstring / lstrcpy( (TCHAR), (wstring).c_str() );    / L"세턴"







https://blog.naver.com/wondo21c/30043174174

http://klkl0.tistory.com/87

http://blog.neonkid.xyz/86

위키백과