none
Dateien nach Base64-Kodierung wiederherstellen RRS feed

  • 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

    Freitag, 4. Dezember 2015 13:04

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


    Freitag, 4. Dezember 2015 13:21
    Moderator
  • 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
    Freitag, 4. Dezember 2015 13:23

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


    Freitag, 4. Dezember 2015 13:21
    Moderator
  • 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
    Freitag, 4. Dezember 2015 13:23
  • Ok an Euch beide, soweit verstanden, mache mich an die Umsetzung.

    Aber jetzt ist Feierabend.

    Ein schönes WE

    Tom

    • Bearbeitet tom krist Freitag, 4. Dezember 2015 14:35
    Freitag, 4. Dezember 2015 13:41