Nie wiem jak to jest z tym BOM'em, ale jeżeli to zawsze jest pierwszy znak, to przed wczytaniem go do zmiennej AnsiString można by go obciąć. Co do klasy TEncoding, być może w Turbo C++ występuje ona pod trochę inną nazwą lub inaczej się ją stosuje:
- Kod: Zaznacz cały
TEncoding *Encoding;
TStringStream *webPage = new TStringStream(NULL, Encoding->GetEncoding(65001), true);
Nie potrafię pomóc nic więcej, gdyż bez enkodowania za pomocą klasy
TEncoding te strony po prostu się nie wczytują, a funkcja
Utf8ToAnsi po prostu się nie sprawdza.
W takim razie może zamiast wczytać do AnsiString wczytać do TMemoryStream
Sprawdziłem i u mnie działa, ale wymaga użycia funkcji Utf8ToAnsi:
- Kod: Zaznacz cały
AnsiString kodHtml, kodHttp;
String zadanyUrl =
"http://katalog-jarmi.pl/dom,i,wnetrze/paszport,energetyczny,wroclaw,s,7305/";
TMemoryStream *webPage = new TMemoryStream();
try
{
IdHTTP1->HandleRedirects = true;
IdHTTP1->ConnectTimeout = 8000;
IdHTTP1->ReadTimeout = 8000;
IdHTTP1->AllowCookies = true;
IdHTTP1->Request->AcceptEncoding = "deflate";
IdHTTP1->Get(zadanyUrl, webPage);
kodHttp = IdHTTP1->ResponseText;
}
catch(EIdSocketError &e)
{
kodHttp = e.Message.Trim();
ShowMessage(kodHttp);
return;
}
catch(Exception &exception)
{
kodHttp = exception.Message;
ShowMessage(kodHttp);
return;
}
webPage->Seek(0, soFromBeginning);
int size = webPage->Size * 2; char *Bufor = new char[size];
webPage->Read(Bufor, size);
kodHtml = Utf8ToAnsi(Bufor);
Memo1->Lines->Text = kodHtml;
natrafiłem tutaj jednak na pewien problem, gdyż o ile dla strony h
ttp://katalog-jarmi.pl/dom,i,wnetrze/paszport,energetyczny,wroclaw,s,7305/ rozmiar bufora:
- Kod: Zaznacz cały
webPage->Seek(0, soFromBeginning);
int size = webPage->Size * 2; char *Bufor = new char[size];
jest wystarczający,m to jednak dla strony
http://www.inkwizytor.pl/biznes,i,ekonomia/kredyty,banki,wpis,105/ jest za mały, dlatego musiałem go dla tej strony ustawić na sztywno
int size = 999999; jak widać ze sporym zapasem.
Jeżeli rozwiążesz problem z rozmiarem bufora, bez definiowania go na sztywno, to podaj to rozwiązanie.