AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Indy IdDeconderMIME.Decodestring konvertiert falsch

Indy IdDeconderMIME.Decodestring konvertiert falsch

Ein Thema von Markus70 · begonnen am 12. Mai 2009 · letzter Beitrag vom 13. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2   
Markus70

Registriert seit: 21. Okt 2004
82 Beiträge
 
Delphi XE7 Professional
 
#1

Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 12. Mai 2009, 13:37
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
  Mit Zitat antworten Zitat
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 12. Mai 2009, 15:27
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/
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#3

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 12. Mai 2009, 15:37
Hallo Markus,

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
Frederik
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 12. Mai 2009, 15:54
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,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Markus70

Registriert seit: 21. Okt 2004
82 Beiträge
 
Delphi XE7 Professional
 
#5

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 12. Mai 2009, 16:00
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?
  Mit Zitat antworten Zitat
Markus70

Registriert seit: 21. Okt 2004
82 Beiträge
 
Delphi XE7 Professional
 
#6

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 13. Mai 2009, 10:12
Habe die neue Indy Version installiert.
Leider bleibt der Fehler der gleiche!
  Mit Zitat antworten Zitat
Markus70

Registriert seit: 21. Okt 2004
82 Beiträge
 
Delphi XE7 Professional
 
#7

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 13. Mai 2009, 10:43
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;
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 13. Mai 2009, 14:05
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
Frederik
  Mit Zitat antworten Zitat
Markus70

Registriert seit: 21. Okt 2004
82 Beiträge
 
Delphi XE7 Professional
 
#9

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 13. Mai 2009, 14:10
Hallo Assertor,

super Danke.

Oder habe ich vielleicht eine andere Möglichkeit das pdf da raus zu bekommen?

Gruß
Markus
  Mit Zitat antworten Zitat
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Indy IdDeconderMIME.Decodestring konvertiert falsch

  Alt 13. Mai 2009, 16:14
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 = 'FileDatathen
    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)!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.
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