AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Speichermüll bei Base64Encode auf einem PC
Thema durchsuchen
Ansicht
Themen-Optionen

Speichermüll bei Base64Encode auf einem PC

Ein Thema von stalkingwolf · begonnen am 31. Jan 2022 · letzter Beitrag vom 31. Jan 2022
 
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
112 Beiträge
 
Delphi 12 Athens
 
#6

AW: Speichermüll bei Base64Encode auf einem PC

  Alt 31. Jan 2022, 10:33
Anbei ein ganz simples Beispiel.
Dazu 2 exe Dateien von 2 verschiedenen Delphi XE4 Versionen.
Die Ausgabe von "testBase64Encode_fehler.exe" sieht wie ein Unicode-Problem aus

Compiliert mit Delphi 11.0 scheint das Demo-Projekt erst einmal zu funktionieren, zumindest solange man sich bei der Eingabe auf den ASCII-Zeichensatz beschränkt. Sobald deutsche Umlaute oder Sonderzeichen ins Spiel kommen, funktioniert der Code in BASE64Codec.pas nicht mehr wie erwartet, denn base64encode() verwendet einen AnsiString. Ich bekomme an dieser Stelle auch eine Compiler-Warnung:
"W1058 Implicit string cast with potential data loss from 'TCaption' to 'AnsiString'".

Base64 dient ja in erster Linie dazu, 8-Bit-Binärdateien (Bytes) in eine Zeichenfolge zu verwandeln, die nur aus lesbaren, Codepage-unabhängigen ASCII-Zeichen besteht. Um einen String (also Text) in Base64 zu codieren, muss also zunächst der Text in Bytes umgewandelt werden; und genau dieser Schritt fehlt in der verwendeten Unit BASE64Codec.pas. Die Historie in BASE64Codec.pas legt nahe, dass die letzten Änderungen/Anpassungen 2004 erfolgt sind; seit Delphi 2009 ist String aber WideString und der Code müsst angepasst werden. Evtl. liest Daniel hier ja mit und kann evtl. eine modernisierte Version zur Verfügung stellen.

Andererseits gibt es seit Delphi 10 die RTL-Unit System.NetEncoding.pas; dort gibt es die Klasse TBase64Encoding, die per class function verwendet werden kann und korrekte Ergebnisse liefert:

Edit2.Text := TNetEncoding.Base64.Encode(Edit1.Text);

HTH
Achim
Achim
  Mit Zitat antworten Zitat
 


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 21:11 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-2025 by Thomas Breitkreuz