AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Base64EncStr / Base64DecStr von gammatester kein Unicode?
Thema durchsuchen
Ansicht
Themen-Optionen

Base64EncStr / Base64DecStr von gammatester kein Unicode?

Ein Thema von DieDolly · begonnen am 19. Nov 2019 · letzter Beitrag vom 20. Nov 2019
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 19. Nov 2019, 18:36
Ich habe mir gerade die beiden funktionen Base64EncStr und Base64DecStr aus gammatesters Unit Mem_Util angeguckt und mir ist aufgefallen, dass die scheinbar kein Unicode können.
(͡° ͜ʖ ͡°) erg ibt etwas, was man nicht mit Base64DecStr zurückrechnen kann.

Delphi-Quellcode:
uses Mem_Util;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Edit1.Text := '(͡° ͜ʖ ͡°)';
end;

function Base64Encode(const S: string): string;
begin
 Result := Base64EncStr(S);
end;

function Base64Decode(const S: string): string;
begin
 Result := Base64DecStr(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit2.Text := Base64Encode(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Edit1.Text := Base64Decode(Edit2.Text);
end;
gammatesters Base64EncStr ergibt: KD+wID8/ID+wKQ==
TNetencoding.Base64Encode ergibt: KM2hwrAgzZzKliDNocKwKQ==

Gibt es hier einen Trick? Innerhalb von Mem_Util sind string-Parameter als BString deklariert, was bei mir AnsiString ergibt.
Delphi-Quellcode:
{$ifdef BIT16}
  {$ifdef V7Plus}
    type
      BString = string[255]; {String of 8 bit characters}
      pBString = ^BString;
      char8 = char; {8 bit characters}
      pchar8 = pchar;
  {$else}
    type
      BString = string[255]; {String of 8 bit characters}
      pBString = ^BString;
      char8 = char; {8 bit characters}
      pchar8 = ^char;
  {$endif}
{$else}
  {$ifdef UNICODE}
    type
      BString = AnsiString; {String of 8 bit characters}
      pBString = pAnsiString;
      char8 = AnsiChar; {8 bit characters}
      pchar8 = pAnsiChar;
    {$else}
    type
      BString = AnsiString; {String of 8 bit characters}
      pBString = pAnsiString;
      char8 = AnsiChar; {8 bit characters}
      pchar8 = pAnsiChar;
  {$endif}
{$endif}
Ich möchte gerne diese Funktionen nutzen, da die doch weitaus schneller sind als die in der TNetEncoding Unit.

Geändert von DieDolly (19. Nov 2019 um 18:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 19. Nov 2019, 20:19
Evtl. das was für dich?
https://lemire.me/blog/2018/01/17/ri...-and-decoding/
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 19. Nov 2019, 20:32
Schon wieder eine neue Bibliothek? Das ist Englisch. Das spreche ich so gut wie Portugisisch. Also gar nicht.
Falls der text sagen soll, dass das nicht geht. Der hier kann es ja auch: https://www.base64encode.org/
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#4

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 19. Nov 2019, 20:36
Was spricht gegen TNetEncoding?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 19. Nov 2019, 20:55
Ich nehme alles zurück was ich zur Geschwindigkeit sagte.
Bis letztes Jahr oder so war TNetEncoding noch sehr viel langsamer als Mem_Util. Jetzt ist es umgekehrt.

Getestet mit 500 Zeilen mit je 50 zufälligen Zeichen. TNetEncoding ist bei mit rund 5x schneller.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 20. Nov 2019, 07:24
Ich habe bei mir auch alles auf TNetEncoding umgestellt, weiß aber nicht, ab wann es eigentlich bei Delphi mit drin ist.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#7

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 20. Nov 2019, 07:57
Vergleichbare Routinen gab es in Soap.EncdDecd.pas bereits seit XE2. System.NetEncoding.pas gibt es seit XE7.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 20. Nov 2019, 09:23
Schon wieder eine neue Bibliothek? Das ist Englisch. Das spreche ich so gut wie Portugisisch. Also gar nicht.
https://www.base64encode.org/
Hallo,
nur ein kleiner Tipp zu Englisch: Du kannst Deine englischen (aber auch "portugiesischen") Texte in einer exzellenten Qualität von
https://www.deepl.com/translator
übersetzen lassen. Es liefert eine wesentlich bessere Übersetzung als z.B. der Google-Translator. Nachteil: derzeit gibt es nur 7 Fremdsprachen.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?

  Alt 20. Nov 2019, 19:19
Was du in deinem Code versuchst, ist einen UTF-16-String in Base64 zu kodieren. Das ergibt für Alphabetschriften selbst bei Unterstützung durch den Encoder keinen Sinn, weil die in der BMP liegen. Du solltest also UTF8Encode benutzen. Das ergibt einen RawByteString, also einen AnsiString ohne Codepage. Den sollte der Decoder dann auch annehmen. Der Compiler sollte eigentlich auch meckern, von wegen imnplizite Stringumwandlung mit Datenverlust.
Nach dem Dekodieren muss man natürlich noch UTF8ToWideString aufrufen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:48 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