Indy -> (
SVN 3871)
Delphi -> 2007 (=
Ansi Strings...)
Nach meinem letzten
SVN Update (ich war vorher irgendwo bei einer Revision aus Juli) funktioniert zwar IMAP toll, aber die HTTP Komponente transferiert Binärdaten nur noch korrupt. Es scheint irgendein Encoding Problem zu sein, dass vermutlich nur unter D2007 oder älter auftritt.
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var HTTP: TIdHTTP;
Strm: TFileStream;
Str: String;
begin
//Create custom Object
HTTP := TIdHTTP.Create(nil);
//Add Timeouts to prevent getting stuck
HTTP.ReadTimeout := 10000;
HTTP.ConnectTimeout := 10000;
HTTP.HandleRedirects := True;
try
try
Strm := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\test.jpg', fmOpenReadWrite);
except
Strm := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\test.jpg', fmCreate);
end;
//Kaputt
Str := HTTP.Get('http://www.dwd.de/bvbw/generator/Sites/DWDWWW/Content/Oeffentlichkeit/WV/WV11/Warnungen/Wetter__Aktuell/Regionenwetter/WetterDeutschland__allgemein__Bild,property=default.jpg');
Strm.Write(Str[1], Length(Str));
//Geht
HTTP.Get('http://www.dwd.de/bvbw/generator/Sites/DWDWWW/Content/Oeffentlichkeit/WV/WV11/Warnungen/Wetter__Aktuell/Regionenwetter/WetterDeutschland__allgemein__Bild,property=default.jpg', Strm);
Strm.Free;
finally
//Cleanup custom Objects
HTTP.Free;
end;
end;
Ein ähnliches Problem gibt es auch in die andere Richtung im TIdHTTPServer. Wenn dort das selbe Bild als ResponseContent angegeben wird, empfängt der Browser nur murks.
Delphi-Quellcode:
AResponseInfo.ContentText := 'hier viel binärcode';
AResponseInfo.WriteContent;
Dort konnte ich einen Workaround finden, indem ich die Kodierung abschalte. IdGlobal.ToBytes (Zeile 4973)
Delphi-Quellcode:
...
//workaround for encoding bug
if ASrcEncoding.ClassName <> ADestEncoding.ClassName then //added
Result := TIdTextEncoding.Convert(
ASrcEncoding,
ADestEncoding,
RawToBytes(AValue[AIndex], LLength))
else //added
Result := RawToBytes(AValue[AIndex], LLength); //added
...
ASrcEncoding und ADestEncoding sind vom Typ TIdMBCSEncoding und haben als Einstellung IsSingleByte = True und MaxCharSize = 1, wodurch eigentlich keine Konvertierung notwendig ist. Es wird aber eine gemacht, die dann den Inhalt zerstört.
Gibt es für
Indy einen richtigen Bug-Tracker? Ich würde dann die Reports direkt in Englisch verfassen können.
Grüße,
paresy