2009/04/17
C++ Builder 2009에서 TIdHTTP의 Get 함수를 이용시 한글 문제
새로 바뀐 굿모닝 팝스 RSS를 분석해 보기 위해서 Indy v10 컴포넌트의 TIdHTTP를 이용해 XML 문서를 가져왔는데 이상하게 한글이 깨져버렸다. RSS 인코딩은 euc-kr 이였고 TIdHTTP 의 Get 함수를 통해 얻은 결과가 UnicodeString 이라서 문제가 발생한게 아닌가하여 AnsiString 으로 바꾸어도 보았지만 한글이 비정상적으로 나왔다.
그래서 인터넷에서 관련 정보를 찾다가 일본 웹페이지에서 델파이를 사용할때 비슷한 문제가 발생하여 해결 했다는 글을 찾았다. 그 글을 참고하여 C++ Builder 로 바꾸어 보았다. 아래 코드가 바꾼 코드이다.
위의 코드로 하니 한글이 깨지지 않았다. 그렇지만 완전한 해결책은 아닌 것 같다.
두가지 방법으로 다른 웹페이지를 접근해 보았는데 Stream 으로 받아 Encode을 거쳐 받는 방법이 항상 한글이 정상적으로 보여지지는 않았다. 웹페이지의 인코딩 방법에 따른 것도 아닌 것 같고, 일단 GMP RSS 분석에서는 문제가 없었지만 깔끔하게 해결하기 위해서는 문제의 원인을 먼저 파악 해
Original Post : http://neodreamer-dev.tistory.com/292
// 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
Labels:
C++ Builder
,
Indy 10
,
TidHTTP
,
TistoryOldPost
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment