Benutzer mit den meisten Antworten
Dateien nach Base64-Kodierung wiederherstellen

Frage
-
Hallo
ich muss mit base64 kodierte PDFs wiederherstellen. Klappt nicht, Adobe meldet Datei beschädigt.
Deshalb habe ich mir eine intakte pdf genommen, diese erst kodiert, anschließend wieder dekodiert, wiederum mit dem Ergebnis: Datei beschädigt!
dazu folgendes Kommandozeilen-Tool, das Ergebnis der Dekodierung wird direkt in eine "Datei.pdf" geschrieben.
Imports System Imports System.IO Imports System.Text Module Module1 Sub Main() Dim anz_args As Integer Dim modus As String Dim source As String Dim target As String anz_args = UBound(Environment.GetCommandLineArgs) Try modus = Environment.GetCommandLineArgs(1) source = Environment.GetCommandLineArgs(2) target = Environment.GetCommandLineArgs(3) Catch MsgBox("Parameter e/d Quelldatei Zieldatei erwartet!") : End End Try If File.Exists(source) Then Dim sr As StreamReader = New StreamReader(source) Dim sText As String = sr.ReadToEnd.ToString Select Case modus Case "e" sText = toBase64(sText) Case "d" sText = fromBase64(sText) End Select Dim sw As StreamWriter = New StreamWriter(target) sw.WriteLine(sText) Else MsgBox(source & " ist nicht vorhanden!") : End End If End Sub Function toBase64(ByVal sText As String) As String Dim nBytes() As Byte = System.Text.Encoding.Default.GetBytes(sText) Return System.Convert.ToBase64String(nBytes) End Function Function fromBase64(ByVal sText As String) As String Dim nBytes() As Byte = System.Convert.FromBase64String(sText) Return System.Text.Encoding.Default.GetString(nBytes) End Function End Module
Mit Texteditor wird sofort augenscheinlich, dass Ausgangsdatei und Ergebnisdatei, die ja identisch mit der Ausgangsdatei sein sollte, nicht identisch sind.
Mache ich grundsätzlich was falsch oder ist function FromBase64String was anderes als bei Wikipedia unter Base64 beschrieben?
Gruß Tom
Antworten
-
Hi,
Encoding.Default ist evtl. nicht das richtige. Probier mal mit anderen Encodings, bspw. Encoding.UTF8 oder auch Encoding.GetEncoding( "ISO-8859-1" ), ...
Zudem kannst Du die Dateiinhalte an sich nicht mit einem String verarbeiten. Nimm einen Stream, ein ByteArray, ... Den Base64 codierten Inhalt kannst Du in einem String halten, die Binärinhalte der PDF nicht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Freitag, 4. Dezember 2015 13:23
- Als Antwort markiert tom krist Freitag, 4. Dezember 2015 14:33
-
Hi Tom,
Du gehst davon aus, dass Deine Dateien keine Steuerzeichen enthalten. Da sie aber Steuerzeichen haben, werden diese bei der Nutzung als Zeichenkette (string) umgewandelt, ggf. überlesen. Das Ergebnis ist dann eine andere Darstellung. Du Solltest nur base64 als Zeichenkette (string) behandeln, die Dateien selbst nur als Byte-Stream.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert tom krist Freitag, 4. Dezember 2015 14:33
Alle Antworten
-
Hi,
Encoding.Default ist evtl. nicht das richtige. Probier mal mit anderen Encodings, bspw. Encoding.UTF8 oder auch Encoding.GetEncoding( "ISO-8859-1" ), ...
Zudem kannst Du die Dateiinhalte an sich nicht mit einem String verarbeiten. Nimm einen Stream, ein ByteArray, ... Den Base64 codierten Inhalt kannst Du in einem String halten, die Binärinhalte der PDF nicht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Freitag, 4. Dezember 2015 13:23
- Als Antwort markiert tom krist Freitag, 4. Dezember 2015 14:33
-
Hi Tom,
Du gehst davon aus, dass Deine Dateien keine Steuerzeichen enthalten. Da sie aber Steuerzeichen haben, werden diese bei der Nutzung als Zeichenkette (string) umgewandelt, ggf. überlesen. Das Ergebnis ist dann eine andere Darstellung. Du Solltest nur base64 als Zeichenkette (string) behandeln, die Dateien selbst nur als Byte-Stream.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert tom krist Freitag, 4. Dezember 2015 14:33