Programming/twitterAPI

트위터 Twitter API (twitCurl) - 한글 처리

smok95 2010. 8. 30. 17:30
반응형

* 트위터API(Twitter API) 사용방법 - Twitcurl


 twitCurl을 사용하여 한글이 포함된 메시지를 트위터에 올리는 경우 아래 그림과 같이 한글이 깨진채로 표시가 됩니다.

원인은 트위터에서 지원하는 utf-8 형식으로 변환하지 않은 채로 글을 올려 발생하는 문제입니다.

관련페이지 : http://dev.twitter.com/pages/counting_characters

윈도우에서는 한글을 표현할때 CP949(CodePage949 또는 MS949 )형식을 사용하여 한글을 표현합니다. cp949는 euc-kr(ks_c_5601-1987)에서 표현하지 못하는 한글을 추가한 형식으로 euc-kr과 호환됩니다. 

위와 같은 문제로 인해 트위터에 글을 올리는 경우 cp949 에서 utf-8로 변환한 후 글을 올리면 정상적으로 한글이 표시가 됩니다.

cp949에서 utf-8로 변환하는 방법은 크게 2가지가 있습니다. win32api를 이용하는 방법과 GNU iconv를 사용하는 방법입니다.
제 경우에는 iconv를 이용하여 변환을 하도록하겠습니다. win32api로 변환을 하시려면 아래 사이트를 참고하시면 됩니다.

* WinAPI를 이용하여 cp949(ANSI) - utf8 인코딩을 변환하자!http://marnitto.edogawa.kr/71

그리고 iconv 사용법은 아래 사이트를 참고하시면 됩니다.

iconv library를 이용해서 euckr to utf-8 변환 : http://www.korone.net/bbs/board.php?bo_table=etc_misc&wr_id=160




#include "twitcurl.h"
using namespace std;
#include "iconv.h"

bool cp949_to_utf8(const string& in, string& out)
{
   iconv_t cd;
   bool ret = false;
   const char* pszIn;
   char* pszOut, *pos;
   size_t inLen, outLen;
   pszOut=NULL;

   cd = iconv_open("UTF-8","CP949");
   if(cd == (iconv_t)(-1))
   {
      return false; 
   }

   inLen = in.length();
   pszIn = in.c_str();

   outLen = (inLen+1) * 2;
   pos = pszOut = (char*)calloc(outLen, sizeof(char));
   if(!pszOut) goto clean;
   
   if(iconv(cd, &pszIn, &inLen, &pos, &outLen)==-1)   goto clean;
   out = pszOut;
   ret = true;
clean:
   iconv_close(cd);
   if(pszOut) free(pszOut);
   return ret;
}

int main(int argc, char* argv[])
{
   twitCurl twit;

   twit.setTwitterUsername(string("username"));
   twit.setTwitterPassword(string("password"));

   string utf8Msg;
   cp949_to_utf8("안녕하세요! 한글메시지입니다.", utf8Msg);
   
   twit.statusUpdate(utf8Msg);
   return 0;
}



위와 같이 utf-8로 변환시킨 후 글을 올리면 아래 그림과 같이 이상없이 한글이 표시가 됩니다.




반응형