![]() |
Indy IdDeconderMIME.Decodestring konvertiert falsch
Hallo,
ich habe ein Base-64 codiertes Feld, welches ein PDF-Dokument enthält. Bisher habe ich es mit BDS2006 und dem IdDecoderMIME via DecodeString (Indy 10.1.5) problemlos umwandeln können. Jetzt habe ich auf BDS2009 gewechselt und versuche das gleiche, muß jedoch feststellen, dass mit der aktuellen IdDecoderMIME Komponente (Indy 10.2.5) einzelne Zeichen anders konvertiert werden, was logischerweise das Ergebnis unbrauchbar macht. Was läuft da schief? Kann es sein, das die neuen Indy Komponenten nicht sauber laufen? Kann ich in BDS2009 die alten Indy Komponenten einbinden oder was kann ich sonst machen?? Danke und Gruß Markus |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Zitat:
Hier: svn://www.indyproject.org/indy/indy10/branches/Tiburon/Lib oder hier indy10.zip (Delphi < 2009) oder IndyTiburon.zip (Delphi 2009): ![]() |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Hallo Markus,
Zitat:
Kannst Du bitte mal ein Beispiel der Ein/Ausgabedaten und Deines Source hier posten? Gruß Assertor |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Zitat:
![]() Das indy10.zip ist iirc noch die Version 10.2.3, ab Tiburon ist es 10.5.5 Cheers, |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
ok, danke.
Bekomme aber beim installieren der "dclIndyProtocols120" einen Fehler: "Der Prozedureinsprungspunkt "@Idheadercoderindy@initialization$qqrv" wurde in der DLL "IndyProtocols120.bpl" nicht gefunden" und dann "Package "..\dclIndyProtocols120.bpl" kann nicht geladen werden. Die angegebene Prozedur existiert nicht". Delphi 2009 entspricht doch Delphi 12, oder? |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Habe die neue Indy Version installiert.
Leider bleibt der Fehler der gleiche! |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Hier mal der reduzierte Source-code und im Archiv das XML File und die pdf Dateien, wie sie mit BDS2006 und D2009 rauskommen.
procedure TForm.ExtractPDF(Sender: TObject); var F,F2:TextFile; field,value:string; Line:Ansistring; line2:widestring; begin AssignFile(F,'C:\MEDIUS\Clips\1.xml'); Reset(F); while not EOF(F) do begin Readln(F,line); field := copy(line,Pos('<',line)+1,Pos('>',line)-Pos('<',line)-1); line := copy(line,Pos('>',line)+1,length(line)-Pos('>',line)); if Pos('</',line) > 0 then value := copy(line,1,Pos('</',line)-1) else value := line; if field = 'FileData' then line2 := IdDecoderMIME1.DecodeString(value); end; CloseFile(F); AssignFile(F2,'C:\Medius\Clips\1.pdf'); ReWrite(F2); Write(F2,line2); CloseFile(F2); end; |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Hi Markus,
ich kann das Problem bei UTF8 Strings in D2009 zumindest teilweise nachvollziehen. Ich habe daher gerade bei uns im Team nachgefragt, ob da ein Problem bekannt ist. Sobald ich etwas genaueres weiß, poste ich wieder hier. Gruß Assertor |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Hallo Assertor,
super Danke. Oder habe ich vielleicht eine andere Möglichkeit das pdf da raus zu bekommen? Gruß Markus |
Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
Bitte kein AssignFile/Reset/Readln/... verwenden (muffiger Pascal Style).
Sondern, ... TFileStream !!! Oder fürs String parsen (iss bei dir nämlich auch grausig): TStringList und StringList.LoadFromFile('1.xml');
Delphi-Quellcode:
Funktioniert bei mir (zumindest mit der aktuellen Indy-Version)!
var
F,F2:TextFile; field,value:string; Line:Ansistring; line2:widestring; PdfBytes: TBytes; //IdDecoderMIME1: TIdDecoderMIME; OutStream: TFileStream; begin //IdDecoderMIME1 := TIdDecoderMIME.Create(Self); AssignFile(F,'1.xml'); Reset(F); while not EOF(F) do begin Readln(F,line); field := copy(line,Pos('<',line)+1,Pos('>',line)-Pos('<',line)-1); line := copy(line,Pos('>',line)+1,length(line)-Pos('>',line)); if Pos('</',line) > 0 then value := copy(line,1,Pos('</',line)-1) else value := line; if field = 'FileData' then begin PdfBytes := IdDecoderMIME1.DecodeBytes(value); end; end; OutStream := TFileStream.Create('generated_1.pdf', fmCreate); try OutStream.WriteBuffer(PdfBytes[0], Length(PdfBytes)); finally OutStream.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz