한글 wstring을 string으로 변환
글쓴이: paek1ju / 작성시간: 일, 2011/09/18 - 11:43오전
안녕하세요. 한글 자판을 작성하고 있는 사람입니다. 저번주에 올린 질문에 이어 또 삽질하다 글올립니다..
제가 변경하고 있는 코드가 한글을 모두 wstring wstr (L"ㄱ"); 와 같은 wide string을 사용하게 되어 있습니다.
헌데 한글을 조합하기 위해서 wstring wstr (L"ㄱ"); 을 string str 으로 변경해서 사용해야 되는데요.
아래 코드에서 보면 string str ("ㄱ"); 의 경우 str.size() 가 3이고 이를 unsigned char로 변형하면 각 바이트가 227, 132, 177 이렇게 됩니다.
int i = 0; /****************************************************************************************/ const unsigned char *ctemp; string str ("ㄱ"); printf("str size %d\n", (int)str.size()); // string을 char로 변환 ctemp = (const unsigned char *)str.c_str(); for (i = 0; i < str.size(); i++) { printf("%c", ctemp[i]); // "ㄱ" 출력 } printf("\n"); for (i = 0; i < str.size(); i++) { printf("%d\n", ctemp[i]); // "ㄱ" 을 int로 출력 } /****************************************************************************************/ * 결과 str size 3 ㄱ 227 132 177
이런 형식으로 아래 코드와 같이 wstring 을 string으로 변환하여 "ㄱ" 을 3바이트로 문자로 접근하려고 합니다.
헌데 wstring 을 string 으로 변환하는 방법이 문제입니다. 인터넷에서 검색하여 알게된
여러가지 방법 wcstombs, wcs_to_mbs 등 사용하면 결과가 이상합니다.
wstring wstr (L"ㄱ") 을 어떻게 하면 string str("ㄱ") 과 같이 변환하여 사용할 수 있을까요?
int i = 0; /****************************************************************************************/ const unsigned char *ctemp; wstring wstr (L"ㄱ"); string str; // wstring을 string으로 변환 // str = wstr2str(wstr); ??? printf("str size %d\n", (int)str.size()); // string을 char로 변환 ctemp = (const unsigned char *)str.c_str(); for (i = 0; i < str.size(); i++) { printf("%c", ctemp[i]); // "ㄱ" 출력 } printf("\n"); for (i = 0; i < str.size(); i++) { printf("%d\n", ctemp[i]); // "ㄱ" 을 int로 출력 } /****************************************************************************************/
Forums:
검색해보니....
이렇게 나왔습니다.
맞는건지는 잘 모르겠네요. ㅇ_ㅇ;;;
Qt에서 빌드 되는것까지는 확인했습니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
잘못된 코드입니다. 해보진 않았지만 의도대로 동작할
잘못된 코드입니다. 해보진 않았지만 의도대로 동작할 것 같지 않군요.
wstring의 기반 자료형인 wchat_t 내에 유니코드 문자가 어떻게 인코딩될지는 표준에 명시되어 있지 않습니다.
string을 wstring으로 변환하기 위해선 일단 string내에 저장된 문자열의 인코딩을 먼저 파악하신 후에 iconv나 ICU를 이용하여 wstring으로 변환하시는 것이 가장 바람직할 것으로 보입니다.
C++11의 string conversion 표준 라이브러리는 아직 gcc에서 구현되지 않은 것 같고, VC 2010에는 구현이 되어있다고 들었습니다.
댓글 달기