Autor
		 | 
		
			Tema: GZipStream: Problema con numero magico  (Leído 22,929 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,562
						 | 
						
							 
							
								14 Enero 2016, 02:11 am 
								por Dayciber
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Cuadrado Mágico 
							 
							Programación C/C++
						 | 
						
							Black Lotus
						 | 
						
							5
						 | 
						
							5,411
						 | 
						
							 
							
								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,349
						 | 
						
							 
							
								19 Noviembre 2013, 21:00 pm 
								por Eleкtro
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Cuadrado Mágico
							 
							Programación C/C++
						 | 
						
							anaaaaaaa
						 | 
						
							3
						 | 
						
							7,502
						 | 
						
							 
							
								 7 Diciembre 2015, 16:37 pm 
								por ivancea96
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							cuadrado magico
							 
							Dudas Generales
						 | 
						
							manno
						 | 
						
							1
						 | 
						
							2,286
						 | 
						
							 
							
								 5 Julio 2020, 02:15 am 
								por tincopasan
							
						 | 
					 
				 
			    |