'프로그래밍/c++'에 해당되는 글 15건

  1. 2014.03.11 실행파일의 정보 (버전 및 실행 경로등) 얻어오기.
  2. 2013.09.03 로컬라이징시 꼭 필요한 locale
프로그래밍/c++2014. 3. 11. 19:51

http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=1196



'프로그래밍 > c++' 카테고리의 다른 글

로컬라이징시 꼭 필요한 locale  (0) 2013.09.03
VFT(Virtual Function Table)  (0) 2013.07.23
RTTI(Run-Time Type Information)  (0) 2013.07.23
USES_CONVERSION  (0) 2013.06.20
c++ 천단위마다 콤마(,) 찍기  (0) 2013.06.18
Posted by GaePein
프로그래밍/c++2013. 9. 3. 17:04

필자의 회사에서 만든 게임이 터키에 런칭하기위해 QA 검수를 한창 돌리던 어느날

필자가 만들었던 욕설필터 기능이 정상동작 하지 않는 다는 검수결과를 듣게 되었습니다.

몇번의 디버깅중에 2가지의 원인을 찾게 되었습니다.

1. 욕설들이 저장되어 있는 테이블이 멀티바이트만 지원했다는 점.

2. locale을 설정하지 않아 대소문자 변환시 대소문자가 정상적으로 변환되지 않았다는 점.

첫번째 문제의 경우에 터키어는 멀티바이트로 모든 언어가 표현되지 않기때문에 그보다 더 많은 언어를 지원하는 유니코드 또는 UTF8을 이용하여 작성되어야 합니다.

테이블을 유니코드 지원하게끔 수정하려고 했더니 익스포트하는 부분부터 건들어야될 부분이 너무 많아서 결국 GG 치고 급한 일정이라 기획팀에 .txt 확장자를 통해서 하드코딩작업을 하게 되었는데 어찌어찌 문제 없이 잘돌아가는것 같아서 안건드리고 있다...;;(유니코드로 저장된 .txt 파일 읽어올때에 유의해야될 사항으로는 BOM(Byte Oder Mark)을 유의하시면 됩니다.)

두번째 문제인 locale!!

locale에 대한 자세한 설명은 내가 장황하게 설명하기 보단 위키참고 하시는게 빠를것 같아...;;;

http://ko.wikipedia.org/wiki/%EB%A1%9C%EC%BC%80%EC%9D%BC 이곳을 참고하시면 됩니다.

간단하게만 설명 드리자면

터키어의 경우 ğüö 이러한 단어가 있을경우 대문자 변환을 하면 필자가 의도한 바로는  ĞÜÖ  와 같이 되어야 하지만  locale을 따로 설정하지 않았다면 GUO 와 같이 변환이 되어 버립니다.

이러한 실수를 방지하기 위하여

std::locale loc("turkish");

const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t> >(loc);

위와 같이 locale을 설정하게 되면 필자가 처음 의도 한대로 문자 변환이 일어나게 됩니다.

대/소문자 변환뿐만 아니라 국가별 화폐단위, 시간표시등에도 locale이 유용하게 쓰이니 참고하시기 바랍니다.



'프로그래밍 > c++' 카테고리의 다른 글

실행파일의 정보 (버전 및 실행 경로등) 얻어오기.  (0) 2014.03.11
VFT(Virtual Function Table)  (0) 2013.07.23
RTTI(Run-Time Type Information)  (0) 2013.07.23
USES_CONVERSION  (0) 2013.06.20
c++ 천단위마다 콤마(,) 찍기  (0) 2013.06.18
Posted by GaePein