vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ASP.NET, WebServices u. Remoting
gzip String von PHP Script (gzencode) in VB.NET entpacken 
Autor: Amanogarnele
Datum: 01.11.14 18:08

Hallo zusammen,

ich habe ein PHP-Skript welches Daten aus einer MySQL Datenbank liefert. Diese werden per http-request von meiner vb.net anwendung abgeholt. Klappt alles super!

Jetzt gibt es aber auch den Fall das die Datenmenge hoch ist. Daher dachte ich mir ich komprimiere den output auf der PHP Seite und dekomprimiere ihn auf VB Seite um Zeit zu sparen. Ich schaffe es aber nicht einen mit gzencode gepackten String auf der VB Seite mit der System.IO.Compression.GZipStream Klasse zu dekomprimieren.

Hat sowas vielleicht schomal einer gemacht und kann mir ein funktionierendes Stück Code bereitstellen? Wäre sehr dankbar.

Das ist der Code auf der PHP Seite:

$output = base64_encode(gzencode('Hallo Welt',9));
Ich habe mehrere Beispiele im Netz gefunden, ausprobiert. Immer auf das base64 encoding geachtet aber ich bekomme den Ursprung nicht herauskodiert. Oft bekomme ich die Fehlermeldung das mit dem Magic Byte etwas nicht stimmt.

Ich hoffe mir kann jemand helfen!

Vielen Dank im Voraus,

Patrick


PS: Folgenden Code habe ich probiert

Public Shared Function UnZip(compressedText As String) As String
Dim gzBuffer As Byte() = Convert.FromBase64String(compressedText)
Using ms As New MemoryStream()
Dim msgLength As Integer = BitConverter.ToInt32(gzBuffer, 0)
ms.Write(gzBuffer, 4, gzBuffer.Length - 4)
Dim buffer As Byte() = New Byte(msgLength - 1) {}
ms.Position = 0
Using zipStream As New System.IO.Compression.GZipStream(ms, _
  System.IO.Compression.CompressionMode.Decompress)
zipStream.Read(buffer, 0, buffer.Length)
End Using
Return System.Text.Encoding.Unicode.GetString(buffer, 0, buffer.Length)
End Using
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: gzip String von PHP Script (gzencode) in VB.NET entpacken 
Autor: ModeratorDaveS (Moderator)
Datum: 02.11.14 11:31

Kannst du das Ergebnis von $output = base64_encode(gzencode('Hallo Welt',9)); posten?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: gzip String von PHP Script (gzencode) in VB.NET entpacken 
Autor: Amanogarnele
Datum: 03.11.14 15:18

Hallo DaveS,

natürlich! Das hatte ich voll vergessen...

Folgender String wird erstellt: H4sIAAAAAAACC/NIzMnJVwhPzSkBAHUUKFAKAAAA


$output = base64_encode(gzencode('Hallo Welt',9));
$output = gzdecode(base64_decode('H4sIAAAAAAACC/NIzMnJVwhPzSkBAHUUKFAKAAAA',9));

Wird vom PHP Skript auch völlig korrekt dekodiert...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: gzip String von PHP Script (gzencode) in VB.NET entpacken 
Autor: ModeratorDaveS (Moderator)
Datum: 03.11.14 16:20

Du versuchst ein leeres Stream zu dekomprimieren. Es geht so, z.B.
    Public Shared Function UnZip(compressedText As String) As String
        Using ms As New IO.MemoryStream(),
            gzs As New IO.MemoryStream(Convert.FromBase64String( _
              compressedText)),
            zipStream As New System.IO.Compression.GZipStream(gzs, _
            System.IO.Compression.CompressionMode.Decompress)
            zipStream.CopyTo(ms)
            Return System.Text.Encoding.UTF8.GetString(ms.ToArray())
        End Using
    End Function

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: gzip String von PHP Script (gzencode) in VB.NET entpacken 
Autor: Amanogarnele
Datum: 03.11.14 18:09

Hallo DaveS,

das funktioniert leider nicht. Ich (muss) das Framework 3.5 nutzen. Hier gibt es u.a. die CopyTo Methode nicht

Hast du dafür noch eine Alternative?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: gzip String von PHP Script (gzencode) in VB.NET entpacken 
Autor: ModeratorDaveS (Moderator)
Datum: 03.11.14 19:07

Das ist nicht wesentlich. In deinem Code verwendest du das leere MemoryStream als Quelle. Deswegen klappt es nicht. Du kannst zB auch ganz normal ein StreamReader verwenden, wie hier. Ich wollte halt möglichst viel von deinem Code weiterverwenden
    Public Shared Function UnZip(compressedText As String) As String
        Using gzs As New IO.MemoryStream(Convert.FromBase64String( _
          compressedText)),
            zipStream As New System.IO.Compression.GZipStream(gzs, _
            System.IO.Compression.CompressionMode.Decompress),
            sr As New IO.StreamReader(zipStream)
            Return sr.ReadToEnd()
        End Using
    End Function

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel