![]() |
Base64EncStr / Base64DecStr von gammatester kein Unicode?
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:
gammatesters Base64EncStr ergibt: KD+wID8/ID+wKQ==
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; 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:
Ich möchte gerne diese Funktionen nutzen, da die doch weitaus schneller sind als die in der TNetEncoding Unit.
{$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} |
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
|
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
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: ![]() |
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
Was spricht gegen TNetEncoding?
|
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
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. |
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
Ich habe bei mir auch alles auf TNetEncoding umgestellt, weiß aber nicht, ab wann es eigentlich bei Delphi mit drin ist.
|
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
Vergleichbare Routinen gab es in Soap.EncdDecd.pas bereits seit XE2. System.NetEncoding.pas gibt es seit XE7.
|
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
Zitat:
nur ein kleiner Tipp zu Englisch: Du kannst Deine englischen (aber auch "portugiesischen") Texte in einer exzellenten Qualität von ![]() übersetzen lassen. Es liefert eine wesentlich bessere Übersetzung als z.B. der Google-Translator. Nachteil: derzeit gibt es nur 7 Fremdsprachen. Gruß, Andreas |
AW: Base64EncStr / Base64DecStr von gammatester kein Unicode?
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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 by Thomas Breitkreuz