본문 바로가기

김탱 개발자/C/C++

유니코드를 멀티바이트로 변환



아직 많은 개발을 하지 않았지만 국내에서만 사용하는 프로그램이 아니라면 유니코드로 개발하는것이 정말 편하다.

근데, 외부 라이브러리를 써야되는 경우 char* 로 받는 경우가 굉장히 많기 때문에 부득이 멀티바이트로 변환해야하는 경우가 생긴다.


http://eslife.tistory.com/253

위 블로그에서 유니코드에 대해 설명을 잘해놓아서 링크함.


검색해보면 여러가지 방법이 많이 있지만, WideCharToMultiByte()가 정확하다.


FaceDetection() DLL 함수가 char* 인수로 경로를 받기때문에 CString -> char* 로 변환을 한거지만 유니코드 프로젝트이기 때문에 CString은 유니코드이다.

WideCharToMultiByte()의 CP_ACP는 현재 윈도우의 기본언어 CodePage를 가져오는것이다.

만약에, 일본어로된 파일명을 한글 윈도우에서 위와 같은 방법으로 읽을 시에는 한글 CodePage에 없는 일본한자가 있기때문에 문자가 깨져서 들어오게 된다.

이를 해결하기 위해서는 해당 CodePage로 읽어들이는 수 밖에 없다.

한국어->949, 일본어(Shift-JIS) -> 932

WideCharToMultiByte(932, 0, wchar_str, -1, char_str, char_str_len, 0,0);

각 나라마다 charset이 있고, CodePage가 정의되어 있다.


또한, 다국어를 지원하는 멀티바이트 프로젝트 개발시 에는 charset 설정 문제, 폰트 문제, 입/출력 문제 등이 생길 수 있다. 이런 의미에서 유니코드로 개발하게되면 이러한 부분들을 신경쓰지 않아도 된다.


위와같이 char*로 문자열을 받는 함수를 사용 할 시에만 변환하여 사용한다면 큰 문제는 없을듯 싶다.


지원되는 코드페이지

https://msdn.microsoft.com/ko-kr/library/aa288104(v=vs.71).aspx

'김탱 개발자 > C/C++' 카테고리의 다른 글

if문과 return값  (0) 2016.10.07
외부 클래스 추가 시 Add Files 안 먹힐때  (0) 2014.12.05
raw파일 읽고 쓰는 기본 소스 (링크)  (0) 2014.07.10
raw파일과 bmp파일의 관계  (0) 2014.07.10
raw파일 읽는법  (0) 2014.07.10