메뉴 건너뛰기

창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳

cocos2d-x에서는 한글을 그냥 출력하려고 하면 깨져서 나온다.

이유는 VS 편집기에서는 ANSI코드 한글을 사용하는데,

cocos2d-x에서 문자는 UTF-8 형식을 쓰기 때문이다.


이것을 해결하는 간단한 방법은


wchar_t wmsg[] = L"한글";

char msg[128];


WideCharToMultiByte(CP_UTF8,0,wmsg,-1,msg,128,0,0);


아래와 같이 유니코드로 한글을 만들고,
코드 변환을 해서 UTF-8로 바꾸는 방법이다.

하지만 이 방법의 문제는 '윈도우에서만 가능한 방법'이라는 점이다.
일단 이것을 맥의 XCode로 가져가면
wchar_t와 WideCharToMultiByte 둘 다 선언되지 않았다고 나온다.
맥에는 이 둘이 없는 것이다.

일단 wchar_t의 경우 맥에서는 기본으로 유니코드를 지원하기 때문이다.
(UTF-8 형식이었는지 UNICODE형식이었는지는 잘 모르겠음)

WideCharToMultiByte는 이것에 대응하는 맥의 명령어가 있었던 걸로 안다.

그래서 저 코드를 멀티플랫폼에서 쓰기 위해서는

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
//윈도우에서의 코드
#endif  // CC_PLATFORM_WIN32

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
//맥에서의 코드
#endif  // CC_PLATFORM_IOS

식으로 처리해줘야 한다.
문자열이 몇개 없는 게임이면 모르겠지만,
나같이 대사량 엄청 많은 게임 만드는 사람은 할 짓이 아니다.
그리고 어차피 로컬라이징을 생각한다면 문자는 전부 외부 파일로 빼는 것이 좋다.

그리고 외부파일로 빼는 편이 훨씬 처리가 간단하다.
메모장을 이용해서 문자열을 적은 후, 저장할 때 UTF-8 형식으로 저장한다.
그리고 그냥 파일을 불러와서 fscnaf로 읽으면 된다.

char buffer[128];
FILE* fp = fopen("string_list.txt", "rb");
if(fp)
{
fscanf(fp, "%s", buffer)

fclose(fp);
}

덤으로, UTF-8의 앞의 3바이트는 endian인지 특별한 값이 들어있는데,
신경 안 쓰고 그냥 읽어들여도 문자는 멀쩡하게 찍힌다.
찜찜하면,

char head[3];
fread(head, sizeof(char), 3, fp);

앞의 3바이트는 읽어서 버리자.

적고보니 아직 맥 환경에서 제대로 작동하는지 테스트는 안 해봤다.
테스트 후 댓글로 성공여부를 적겠다.
태그 :
조회 수 :
1941
등록일 :
2013.07.08
06:25:19 (*.75.34.129)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=700126

똥똥배

2013.07.08
10:41:56
(*.75.34.129)

일단 결과는 OK입니다.

문제는 그쪽이 아니고 fopen 쪽이라서 한참 삽질했네요.

fopen의 경우 윈도우 환경에서는 잘 되는데 맥에서는 파일을 찾지 못 합니다.

서로 작업 경로가 달라서 말이죠.


그래서 cocos2d에서 제공하는 CCFileUtils를 이용해서 파일에 접근해야 합니다.

CCFileUtils 사용법은 검색해보면 많이 나올테니 굳이 적지 않겠습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
145 QT 프로젝트 배포에 필요한 거 똥똥배 2013-07-11 602
144 cocos2d-x 2.2.2 문자열 출력 버그 [2] 똥똥배 2014-06-10 602
143 cocos2d-x 2.2.2 윈도우 환경 기본 메모리 누수 똥똥배 2014-03-10 640
142 cocos2d-x Clipping Layer 수정 똥똥배 2013-09-10 670
141 Lua 소코반: 상자를 만들고 옮기고 상자와 상자가 겹치거나 상자와 벽이 겹치지 않게 해 보자! 노루발 2013-09-17 677
140 CCTextFieldTTF 0바이트 메모리 누수 버그 해결법 똥똥배 2014-01-13 693
139 Lua 소코반: 벽을 뚫고 나가지 않게 해보자! 노루발 2013-09-17 696
138 Love2D를 사용하기 위한 Lua 강좌: 입출력과 기본 노루발 2013-09-17 709
137 흥크립트 원인불명 버그... [3] file 네모상자 2008-02-16 738
136 Lua 소코반: 목표 지점을 만들고, 상자가 모두 옮겨지면 게임을 끝내자! 노루발 2013-09-17 755
135 Lua 소코반: 플레이어를 그리고 움직이게 해보자 노루발 2013-09-17 759
134 게임의 기본 설정을 담당하는 love.conf 노루발 2013-09-17 764
133 Cocostudio의 ActionNode 메모리 누수 해결법(cocos2d-x 2.2.2) [2] 똥똥배 2014-03-09 776
132 cocos2d-x 2.2.2 UILabelBMFont 메모리 누수 해결법 [2] 똥똥배 2014-03-10 784
131 이미지 그리는 방법 1편 노루발 2013-09-17 813
130 이미지 그리는 방법: 2편. 부제: 쿼드! 노루발 2013-09-17 822
129 Lua 소코반 EX: 포팅: 2 (키가 눌리면 이동하게 해 보자) 노루발 2013-09-18 832
128 Lua 소코반: 맵을 뿌리자. 노루발 2013-09-17 837
127 Lua 소코반 EX: 포팅: 1 노루발 2013-09-18 857
126 Lua 소코반 EX: 포팅: 3 (머나먼 여행길 안녕 친구여) 노루발 2013-09-18 914