Autor
|
Tema: GZipStream: Problema con numero magico (Leído 22,248 veces)
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Hola muchach@s, necesito descomprimir un string comprimido en gzip, y encontre este source que estaba en C#.NET pero lo converti a VB.NET, el problema se genera en el zip.Read(buffer, 0, buffer.Length)
y me genera este error El número mágico del encabezado de GZip no es correcto. Asegúrese de que está pasando una secuencia GZip. Busque que era numero magico, y son los primeros bytes de todo archivo, que ayudan a identificar de que tipo de archivo es. Ej: GIF87a es el "numero magico" de un tipo de GIFhttp://es.wikipedia.org/wiki/N%C3%BAmero_m%C3%A1gicoSi guardo el contenido del gzip, en un fichero, y luego descomprimo con otra rutina similar, funciona de maravilla. FUNCION PARA DESCOMPRIMIR UN STRING - FUNCIONA MAL Private Function UnZip(ByVal compressedText As String) As String Dim gzBuffer As Byte() = System.Text.Encoding.ASCII.GetBytes(compressedText) '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 zip As New GZipStream(ms, CompressionMode.Decompress) zip.Read(buffer, 0, buffer.Length) End Using Return System.Text.Encoding.UTF8.GetString(buffer) End Using End Function
FUNCION PARA DESCOMPRIMIR UN ARCHIVO - FUNCIONA BIEN Private Function DecompressFile(ByVal CompressedFilename As String, ByVal DecompressedFilename As String) As Boolean Try Dim [Stream] As FileStream = New FileStream(CompressedFilename, FileMode.Open) Dim [GZipStream] As GZipStream = New GZipStream([Stream], CompressionMode.Decompress) Dim sr As StreamReader = New StreamReader(CType([GZipStream], IO.Stream)) My.Computer.FileSystem.WriteAllText(DecompressedFilename, sr.ReadToEnd(), False) sr.Close() : [Stream].Close() If File. Exists(DecompressedFilename ) Then Return True Catch ex As IOException msgbox(ex.Message) Catch ex As Exception msgbox(ex.Message) End Try Return False End Function
Espero puedan ayudarme, muchas gracias.
|
|
« Última modificación: 2 Noviembre 2010, 07:33 am por Sancho.Mazorka »
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Puede que sea el Encoding. Échale un ojo a: Private Function UnZip(ByVal compressedText As String) As String Dim gzBuffer As Byte() = System.Text.Encoding.ASCII.GetBytes(compressedText) '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 zip As New GZipStream(ms, CompressionMode.Decompress) zip.Read(buffer, 0, buffer.Length) End Using Return System.Text.Encoding.UTF8.GetString(buffer) End Using End Function
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
A continuacion te listo como intente decodificar cada linea, donde tira el error, la excepcion que genera y el mensaje de error.Dim gzBuffer As Byte() = System.Text.ASCIIEncoding.GetBytes(compressedText)
zip.Read(buffer, 0, buffer.Length) Excepción del tipo 'System.IO.InvalidDataException' en System.dll El número mágico del encabezado de GZip no es correcto. Asegúrese de que está pasando una secuencia GZip.
Dim gzBuffer As Byte() = System.Text.UnicodeEncoding.GetBytes(compressedText)
zip.Read(buffer, 0, buffer.Length) Excepción del tipo 'System.IO.InvalidDataException' en System.dll El número mágico del encabezado de GZip no es correcto. Asegúrese de que está pasando una secuencia GZip.
Dim gzBuffer As Byte() = System.Text.UTF32Encoding.GetBytes(compressedText)
zip.Read(buffer, 0, buffer.Length) Excepción del tipo 'System.IO.InvalidDataException' en System.dll El número mágico del encabezado de GZip no es correcto. Asegúrese de que está pasando una secuencia GZip.
Dim gzBuffer As Byte() = System.Text.UTF7Encoding.GetBytes(compressedText)
zip.Read(buffer, 0, buffer.Length) Excepción del tipo 'System.IO.InvalidDataException' en System.dll El número mágico del encabezado de GZip no es correcto. Asegúrese de que está pasando una secuencia GZip.
Dim gzBuffer As Byte() = System.Text.UTF8Encoding.GetBytes(compressedText)
Dim msgLength As Integer = BitConverter.ToInt32(gzBuffer, 0) Dim buffer As Byte() = New Byte(msgLength - 1) {} 'la variable msgLength toma este valor -1182735841Excepción del tipo 'System.OverflowException' en Host Uploader.exe La operación aritmética ha provocado un desbordamiento.
Dim gzBuffer As Byte() = Convert.FromBase64String(compressedText)
Convert.FromBase64String(compressedText) Excepción del tipo 'System.FormatException' en Host Uploader.exe Carácter no válido en una cadena Base-64.
Gracias por la respuesta, si encontras la solucion te lo voy a agradecer mucho. PD: Como remarcas una linea dentro del tag Codigo? como hiciste vos
|
|
« Última modificación: 2 Noviembre 2010, 17:04 pm por Sancho.Mazorka »
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Remarcar lo haces así: [code=csharp,1,4,5,7][/code] En ese caso la Linea 1, 4 la 5 y la 7 se resaltan.
Continuando con el tema.
Ese texto que quieres descomprimir, de qué manera lo estás comprimiendo, ya que eso puede que esté afectando la forma final y obviamente no puede reversarse luego.
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Ahh ok, copado lo de remarcar, gracias! Hago un GET a http://www.megaupload.com/ y en las cabeceras les digo que acepto gzip, entonces me devuelven en gzip (podria no hacerlo, pero sino es muucho mas lo que tengo que descargar. 11kb gzip vs. 73kb sin comprimir) Estas son las cabeceras de respuesta del servidor, el cuerpo del mensaje es la web comprimida, la cual almaceno en un string y la paso directamente a la funcion Unzip HTTP/1.1 200 OK Date: Tue, 02 Nov 2010 17:03:53 GMT Server: Apache Set-Cookie: l=es; expires=Sun, 05-Mar-2017 12:37:13 GMT; path=/; domain=.megaupload.com Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 11707 Connection: close Content-Type: text/html
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Sube el code a pastebin y postea el code. Es que no tengo tiempo de tirar un demo xP
|
|
|
En línea
|
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Bueno disculpa, pero el code está un poco difícil de leer, y no puedo analizarlo todo por falta de tiempo.
Te recomiendo que intentes hacer Unit Testing o algo parecido para probar los resultados de cada método.
Un saludo.
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Ok, no hay drama, muchas gracias igual por la ayuda! Por si tenes un tiempito, en el ws_dataarrival, esta la llamada a Unzip2() (lo marque con muchos numerales '#########) y al final del archivo principal estan todas las funciones que he ido probando, y te marque la que uso con numerales tambien. Hay varios archivos, pero por ahora no son utilizados. Subi todo el proyecto asi te era mas comodo.
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Sí eso ví. Otra cosa.
Ví que tienes mucho en español y otras cosas en inglés, trata de usar un solo idioma, si es inglés mejor.
En los nombres de los métodos no uses _ a menos de que sea un método handler de un evento.
Y Trata de usar clases para todo, de esa forma es un poco más mantenible.
Un saludo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con cuadrado mágico [RESUELTO]
Programación C/C++
|
bigfu
|
7
|
13,174
|
14 Enero 2016, 02:11 am
por Dayciber
|
|
|
Cuadrado Mágico
Programación C/C++
|
Black Lotus
|
5
|
5,141
|
15 Marzo 2013, 20:58 pm
por Black Lotus
|
|
|
Pasar programa de Ciclo if a for (cuadro magico)
.NET (C#, VB.NET, ASP)
|
ellandax
|
1
|
2,230
|
19 Noviembre 2013, 21:00 pm
por Eleкtro
|
|
|
Cuadrado Mágico
Programación C/C++
|
anaaaaaaa
|
3
|
7,361
|
7 Diciembre 2015, 16:37 pm
por ivancea96
|
|
|
cuadrado magico
Dudas Generales
|
manno
|
1
|
2,137
|
5 Julio 2020, 02:15 am
por tincopasan
|
|