Dateigröße -> base64 / normal

Raven280438

Erfahrenes Mitglied
Hi,

ich habe einen String, der base64 kodiert ist. Er enthält z.b. eine PDF-Datei. Gibt es eine Möglichkeit rauszufinden, wie groß diese PDF-Datei unkodiert ist? Ich habe gelesen, base64 benötigt rund 30% mehr Platz als unkodiert.

Hintergrund zu der Frage: Ich habe ein Skript, das E-Mails aus einem Postfach anzeigt. Wenn die E-Mail jetzt nur aus einer Datei besteht, ohne Text (also kein multipart), dann zeigt das Skript als Dateigröße die Größe der E-Mail an. Das ist aber nicht die Größe der Datei da der Inhalt base64 kodiert ist und so mehr Speicher benötigt als unkodiert.

Ich hoffe ich hab mich verständlich ausgedrückt.



Gruß
 
Und hier ist noch eine exakte Variante:
PHP:
function base64size2normalsize($base64string)
{
    $len=strlen($base64string);
    $fuellbytes=strpos($base64string,"=",$len-2);
    $fuellbytes=$fuellbytes?$len-$fuellbytes:0;
    return $len*3/4-$fuellbytes;
}
 
ah vielen dank.

Um das Skript ein bisschen schneller laufen zu lassen:
Kann man die Größe der Datei auch aus der Größe der E-Mail berechnen? Da müsste ich nicht die ganze Mail in einen String einlesen lassen.


Gruß
 
Die dekodierte Länge aus der Länge des Nachrichtenkörpers abzuleiten, ist etwas schwierig. Denn dieser enthält zusätzlich noch Zeilenumbruchzeichen und am Ende eine unbekannte Anzahl an Füllzeichen.

Nehmen wir als Beispiel das Beispiel von Wikipedia:
SMOkdHRlbiBIw7x0ZSBlaW4gw58gaW0gTmFtZW4sIHfDpHJlbiBzaWUgbcO2Z2xpY2hlcndlaXNl
IGtlaW5lIEjDvHRlIG1laHIsDQpzb25kZXJuIEjDvMOfZS4NCg==
Dieses würde in der Nachricht mit der Länge 130 angegeben, die sich sequenziell aus 76 Zeichen Base-64-Code, 2 Zeichen Zeilenumbruchsequenz (\r\n) und noch einmal 52 Zeichen Base-64-Code (davon wiederum 2 irrelevante Füllzeichen) zusammensetzt. Die tatsächliche Base-64-Codelänge (ohne Füllzeichen) beträgt also nur 126 Zeichen, was gegenüber den angegebenen 130 Zeichen einer Ungenauigkeit von etwa 3,17% entspricht.
 
Zurück