Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Indy IdDeconderMIME.Decodestring konvertiert falsch (https://www.delphipraxis.net/133937-indy-iddecondermime-decodestring-konvertiert-falsch.html)

Markus70 12. Mai 2009 12:37


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

ulrich.b 12. Mai 2009 14:27

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
 
Zitat:

Zitat von Markus70
Kann ich in BDS2009 die alten Indy Komponenten einbinden oder was kann ich sonst machen??

Versuch mal die aktuelle version.

Hier:

svn://www.indyproject.org/indy/indy10/branches/Tiburon/Lib

oder hier indy10.zip (Delphi < 2009) oder IndyTiburon.zip (Delphi 2009):

http://indy.fulgan.com/ZIP/

Assertor 12. Mai 2009 14:37

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
 
Hallo Markus,

Zitat:

Zitat von Markus70
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??

Die älteren Versionen der Indy Komponenten laufen nicht auf Delphi 2009 wegen der bekannten Umstellungen der Delphi RTL/VCL auf Unicode.

Kannst Du bitte mal ein Beispiel der Ein/Ausgabedaten und Deines Source hier posten?

Gruß Assertor

mjustin 12. Mai 2009 14:54

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
 
Zitat:

Zitat von ulrich.b

oder hier (indy10.zip):

http://indy.fulgan.com/ZIP/

Statt indy10.zip sollte man für Delphi 2009 besser http://indy.fulgan.com/ZIP/IndyTiburon.zip verwenden.

Das indy10.zip ist iirc noch die Version 10.2.3, ab Tiburon ist es 10.5.5

Cheers,

Markus70 12. Mai 2009 15:00

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?

Markus70 13. Mai 2009 09:12

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch
 
Habe die neue Indy Version installiert.
Leider bleibt der Fehler der gleiche!

Markus70 13. Mai 2009 09:43

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;

Assertor 13. Mai 2009 13:05

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

Markus70 13. Mai 2009 13:10

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

ulrich.b 13. Mai 2009 15:14

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:
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;
Funktioniert bei mir (zumindest mit der aktuellen Indy-Version)!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz