Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memo.Text := Ansistring? nur wie (https://www.delphipraxis.net/127085-memo-text-%3D-ansistring-nur-wie.html)

jbg 7. Jan 2009 17:01

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von emsländer
Das zweite Zeichen ist 0

Dann konntest du das aber auch in Delphi 2007 auch nicht in einem Memo anzeigen, denn das geht über die WinAPI und der gibt man einen PChar mit, der Nullterminiert ist.

Zitat:

nur wenn ich die Datei wie vorher beschreiben eingelesen habe, dann war die komplett in dem AnsiString drin.
Das ist sie mit meinem Code auch. Nur die Anzeige schlägt wegen dem WionAPI-PChar Problem fehl.

Wie du den Codierten Text in einen UnicodeString überträgst, musst du dir noch überlegen. Am besten dekodierst du ihn vor der Konvertierung oder du nutzt nur AnsiString für ihn.

emsländer 7. Jan 2009 17:09

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Zitat:

Zitat von emsländer
Das zweite Zeichen ist 0

Dann konntest du das aber auch in Delphi 2007 auch nicht in einem Memo anzeigen, denn das geht über die WinAPI und der gibt man einen PChar mit, der Nullterminiert ist.

Zitat:

nur wenn ich die Datei wie vorher beschreiben eingelesen habe, dann war die komplett in dem AnsiString drin.
Das ist sie mit meinem Code auch. Nur die Anzeige schlägt wegen dem WionAPI-PChar Problem fehl.

Wie du den Codierten Text in einen UnicodeString überträgst, musst du dir noch überlegen. Am besten dekodierst du ihn vor der Konvertierung oder du nutzt nur AnsiString für ihn.

Ich widerpreche Dir an dieser Stelle. Denn die Tests, bevor ich diese Verschlüsselung in meinen Code eingebaut habe, habe ich immer mit Memos zur Kontrolle gemacht.

Wie gesagt, vorher hat mein Programm (besteht aus 45 einzelnen Units und Forms und über 100.000 Zeilen Code) so funktioniert. Diese Datei, die ich da einlese ist mittels JVCeasar verschlüsselt. Ich habe sie immer auf diese Art und Weise eingelesen und dann entschlüsselt - und voila - die in der Datei versteckten XML-Daten waren einwandfrei zu lesen. Mit D2009 klappt das jetzt so nicht mehr!

Gruss

EL

jbg 7. Jan 2009 17:19

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von emsländer
Ich widerpreche Dir an dieser Stelle.

Welchem Teil widersprichst du denn? Dem das der AnsiString die gesamten Daten aus der Datei enthält, oder dem Teil in dem ich vom PChar-Problem schreibe?

Zitat:

Diese Datei, die ich da einlese ist mittels JVCeasar verschlüsselt.
Vielleicht ist ja der Entschlüsselungs-Code defekt. (=> nicht richtig nach Unicode migriert)

emsländer 7. Jan 2009 17:23

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Zitat:

Zitat von emsländer
Ich widerpreche Dir an dieser Stelle.

Welchem Teil widersprichst du denn? Dem das der AnsiString die gesamten Daten aus der Datei enthält, oder dem Teil in dem ich vom PChar-Problem schreibe?

Zitat:

Diese Datei, die ich da einlese ist mittels JVCeasar verschlüsselt.
Vielleicht ist ja der Entschlüsselungs-Code defekt. (=> nicht richtig nach Unicode migriert)

Ich widerspreche dem Teil, wo Du schreibst, das ich das in D2007 nicht ins Memo bekomme. Das ging definitiv!

Bis zum Enschlüsselungscode komme ich ja:

Delphi-Quellcode:
  var ansitmp : ansistring;
      stmp : string;
begin


   ansitmp := einlesen ... ;  => Hier kann ich den kompletten Inhalt im Debugger sehen.
   
   stmp := ansitmp; oder alle bisher getesteten Funktionen - nichts funktioniert. Es ist nur das erste Zeichen da.


   result := entschlüsselung; .... bisher kein Thema, aber im Moment komme ich gar nicht erst hier hin.
end;

Es muss doch "verdammtnochmal" ne Möglichkeit geben, um das Zeugs in einen String zu packen!

Gruss

EL


Gruss

EL

jbg 7. Jan 2009 17:42

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von emsländer
stmp := ansitmp; oder alle bisher getesteten Funktionen - nichts funktioniert. Es ist nur das erste Zeichen da.


result := entschlüsselung; .... bisher kein Thema, aber im Moment komme ich gar nicht erst hier hin.

Entschlüssle den Text doch vor der Umwandlung in einen UnicodeString. Bei stmp := ansitmp werden nämlich Zeichen, die größer als 127 sind, in andere Code-Points gemappt, was natürlich zu einer Fehlinterpretation führt.



Zitat:

Ich widerspreche dem Teil, wo Du schreibst, das ich das in D2007 nicht ins Memo bekomme. Das ging definitiv!
Also wenn ich " Memo1.Text := 'Hallo'#0'abc'; " in Delphi 2007 eingebe, dann steht da nur "Hallo" im Memo. Das ging also definitiv vorher auch nicht. Was aber ging, war wohl, dass die Daten nicht fehlinterpretiert wurden, weil keine Umsetzung zwischen ANSI und UTF16 stattgefunden hat.

emsländer 7. Jan 2009 17:49

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Zitat:

Zitat von emsländer
stmp := ansitmp; oder alle bisher getesteten Funktionen - nichts funktioniert. Es ist nur das erste Zeichen da.


result := entschlüsselung; .... bisher kein Thema, aber im Moment komme ich gar nicht erst hier hin.

Entschlüssle den Text doch vor der Umwandlung in einen UnicodeString. Bei stmp := ansitmp werden nämlich Zeichen, die größer als 127 sind, in andere Code-Points gemappt, was natürlich zu einer Fehlinterpretation führt.

Wie sollte das gehen? Ich bekomme den Kram nicht einmal entschlüsselt rüber! (Was ja toll wäre)

Gruss

EL

jbg 7. Jan 2009 17:58

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von emsländer
Wie sollte das gehen? Ich bekomme den Kram nicht einmal entschlüsselt rüber! (Was ja toll wäre)

Das hieße dann aber dass du entweder defekte ANSI Daten in der Datei hast, oder du UTF16 Daten in die Datei geschrieben hast. In letzterem Fall musst du die dann natürlich als UTF16 einlesen.

Wie schreibst du denn die Daten in die Datei?

emsländer 7. Jan 2009 18:02

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
Zitat:

Zitat von emsländer
Wie sollte das gehen? Ich bekomme den Kram nicht einmal entschlüsselt rüber! (Was ja toll wäre)

Das hieße dann aber dass du entweder defekte ANSI Daten in der Datei hast, oder du UTF16 Daten in die Datei geschrieben hast. In letzterem Fall musst du die dann natürlich als UTF16 einlesen.

Wie schreibst du denn die Daten in die Datei?

Die Daten werden wie folgt geschrieben:

Delphi-Quellcode:
          try
            HttpCon.Post(sURL,strLParam,_sstream);
          except
            raise;
          end;
          sfiledata := _sstream.DataString;
          freeandnil(_sstream);
          _codiert := JvCaesarcipher.EncodeString(fddschl,sfiledata);
           fs := TFilestream.Create(sTmpFileName,fmCreate or fmShareDenyWrite);
             try
               fs.Position := 0;
               fs.Write(Pointer(_codiert)^,Length(_codiert));
             finally
               freeandnil(fs);
            end;
           close;
         end;
Gruss

EL

jbg 7. Jan 2009 18:17

Re: Memo.Text := Ansistring? nur wie
 
_codiert hast welchen Datentyp?

emsländer 7. Jan 2009 18:19

Re: Memo.Text := Ansistring? nur wie
 
Zitat:

Zitat von jbg
_codiert hast welchen Datentyp?

var _codiert : string;

Gruss

EL


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

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