2009/04/17

C++ Builder 2009에서 TIdHTTP의 Get 함수를 이용시 한글 문제

새로 바뀐 굿모닝 팝스 RSS를 분석해 보기 위해서 Indy v10 컴포넌트의 TIdHTTP를 이용해 XML 문서를 가져왔는데 이상하게 한글이 깨져버렸다. RSS 인코딩은 euc-kr 이였고 TIdHTTP 의 Get 함수를 통해 얻은 결과가 UnicodeString 이라서 문제가 발생한게 아닌가하여 AnsiString 으로 바꾸어도 보았지만 한글이 비정상적으로 나왔다.


// strRSSUrl 의 소스 받기
UnicodeString strXML = IdHTTP->Get( strRSSUrl );



그래서 인터넷에서 관련 정보를 찾다가 일본 웹페이지에서 델파이를 사용할때 비슷한 문제가 발생하여 해결 했다는 글을 찾았다. 그 글을 참고하여 C++ Builder 로 바꾸어 보았다. 아래 코드가 바꾼 코드이다.


// Stream 으로 받아서 Encoding 을 하여 받는 방법
TMBCSEncoding* pEnc = new TMBCSEncoding( 949 );
TMemoryStream* pStream = new TMemoryStream();

IdHTTP->Get( strRSSUrl, pStream );

pStream->Position = 0;

TStrings* pStrXML = new TStringList();
pStrXML->LoadFromStream( pStream, pEnc );

AnsiString strContentXML = AnsiString( pStrXML->GetText() );
int size = strContentXML.Length();

pEnc->Free();
pStream->Free();
pStrXML->Free();



위의 코드로 하니 한글이 깨지지 않았다. 그렇지만 완전한 해결책은 아닌 것 같다.

두가지 방법으로 다른 웹페이지를 접근해 보았는데 Stream 으로 받아 Encode을 거쳐 받는 방법이 항상 한글이 정상적으로 보여지지는 않았다. 웹페이지의 인코딩 방법에 따른 것도 아닌 것 같고, 일단 GMP RSS 분석에서는 문제가 없었지만 깔끔하게 해결하기 위해서는 문제의 원인을 먼저 파악 해

Original Post : http://neodreamer-dev.tistory.com/292

No comments :

Post a Comment