Showing posts with label TidHTTP. Show all posts
Showing posts with label TidHTTP. Show all posts

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

2008/09/18

Indy Client로 인터넷상의 파일 존재 유무 파악하기

// 파일 존재 여부 테스트
try
{
    IdHTTP->Head( strURL );
}
catch(Exception &e)
{
    ShowMessage( "파일이 존재하지 않습니다.\n\n" + strURL );
}
TidHTTP 컴포넌트의 Head 메소드를 이용해 인터넷상의 파일이 존재 하는지 확인하는 방법이다.
이는 Head를 가져오기를 시도하면서 예외사항이 발생하는지를 보고 판단하는 것인데 엄밀히 말하면 인터넷이 안될 경우도 있기때문에 파일의 존재 유무 보다는 파일에 접근이 가능한지를 판단하는 것으로 보는게 옳을 듯 하다.
정확한 에러 원인은 Exception 개체의 에러를 분석하면 가능하다.

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