메뉴 건너뛰기

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

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바이트는 읽어서 버리자.

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

똥똥배

2013.07.08
10:41:56
(*.75.34.129)

일단 결과는 OK입니다.

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

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

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


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

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

List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일
185 Bootstrap4 container class가 적용된 div의 양 옆에 설정하지 않은 margin이 생김 노루발 662   2024-02-07 2024-02-07 14:25
 
184 express.js 세션 적용 후 리다이렉트 시 세션 적용이 제대로 안 되는 문제점 노루발 554   2024-02-07 2024-02-07 14:23
 
183 illegal character 방지 [3] 노루발 746   2023-07-17 2023-07-19 16:14
 
182 Lua-love2d TCP 통신 [1] 노루발 737   2023-07-14 2023-07-22 16:19
 
181 PHP로 웹게임 만드는 영상 [1] 노루발 1554   2021-06-25 2022-01-28 03:40
 
180 팁 certbot을 이용한 HTTPS 인증서 발급 및 적용 노루발 686   2021-01-12 2021-01-12 16:57
 
179 Love2d 게임 안드로이드로 패키징하기 노루발 703   2021-01-11 2021-02-21 01:45
 
178 팁 자동화된 Lua 스크립트의 문서화 - LDoc 노루발 44086   2021-01-11 2021-01-11 11:53
 
177 팁 리캡챠 적용 [1] 노루발 699   2021-01-08 2021-01-11 12:15
 
176 팁 Oracle cloud에 Nginx/MariaDB 설치하기 노루발 689   2020-12-06 2020-12-06 20:19
 
175 팁 Love2d로 만든 로그라이크 예제 노루발 978   2020-11-30 2020-11-30 22:54
 
174 팁 Love2d 이미지 하얗게 그리기 노루발 657   2020-11-23 2020-11-23 04:11
 
173 팁 루아 스타일 가이드 노루발 707   2020-11-19 2020-11-19 00:58
 
172 팁 턴 기반 시스템 구현에 대한 글 [4] 노루발 1266   2020-11-14 2020-11-18 05:49
 
171 팁 이쁜 눈나가 유니티 개발 알려주는 재생목록 노루발 665   2020-11-12 2020-11-12 05:59
 
170 팁 love2d에서 안드로이드 터치 제스처 인식하기 노루발 645   2020-11-12 2020-11-12 00:38
 
169 팁 특정좌표를 기준으로 zoom in/zoom out하기 노루발 720   2020-11-11 2020-11-11 01:22
 
168 팁 Lua 클래스 만들고 활용하기 노루발 654   2020-11-06 2020-11-06 22:43
 
167 팁 Lua 테이블 안에 함수 저장하기 노루발 651   2020-11-06 2020-11-06 21:07
 
166 팁 Lua 인수로 nil값이 들어왔을 경우 처리하기 노루발 697   2020-11-06 2020-11-06 20:29