2016-08-19 1 views
0

lua의 문자열에서 gzip을 압축 해제하는 데 문제가 있습니다. (mb 나쁜 이해)Lua가 문자열에서 gzip을 압축 해제합니다.

응답 하나의 웹 서비스의 응답은 base64로 인코딩 된 gzip 문자열입니다. 샘플의 경우 C#에서 일부 코드를 얻습니다.

public static string Decompress(byte[] value, Encoding Encoding = null) 
    { 
     if (value == null) return null; 
     Encoding = Encoding ?? System.Text.Encoding.Unicode; 
     using (var inputStream = new MemoryStream(value)) 
     using (var outputStream = new MemoryStream())        
     { 
      using (var zip = new GZipStream(inputStream, CompressionMode.Decompress)) 
      { 
       byte[] bytes = new byte[4096]; 
       int n; 
       while ((n = zip.Read(bytes, 0, bytes.Length)) != 0) 
       { 
        outputStream.Write(bytes, 0, n); 
       } 
       zip.Close(); 
      } 
      return Encoding.GetString(outputStream.ToArray());  
     } 
    } 

    static void Main(string[] args) 
    { 
     const string encodedText = "H4sIAAAAAAAEAHMNCvIPUlRwzS0oqVQoLinKzEtXyC9SyCvNyYFxM/OAqKC0RKEgsSgxN7UktQgAwOaxgjUAAAA="; 

     byte[] decodedBytes = Convert.FromBase64String(encodedText); 

     var decodedString = Decompress(decodedBytes, Encoding.UTF8); 

     Console.WriteLine(decodedString); 

    } 

나는 (의 nginx에) 루아이 작업을 수행 바이트

local byte_table={}; 
base64.base64_decode(res_string):gsub(".", function(c){ 
table.insert(byte_table, string.byte(c)) 
}) 

의 base64로 문자열 배열에서 만들하지만 zlib와 함께 몇 가지 문제를 가지고하려고합니다.

lua에서 IO 스트림을 사용하고 gzip을 압축 해제하는 방법을 알려주십시오.

답변

0

나는 (의 nginx에) 루아이 작업을 수행하고

아니, 당신은 숫자의 무리와 함께 루아 테이블을 만들고 바이트의 base64로 문자열 배열에서 만들려고.

디코드 base64 및 결과 문자열 전체를 zlib로 피드하십시오. local result = zlib.decompress(str,31)

+0

u는이 마법의 숫자 31를 얻을 :

난은 gzip 압축 해제에 대한 사용 http://luaforge.net/projects/lzlib/ 해요? –

+0

어딘가에 인터넷 검색. – FareakyGnome

+0

'로컬 결과 = zlib.decompress (base64.base64_decode ('H4sIAAAAAAAEAHMNCvIPUlRwzS0oqVQoLinKzEtXyC9SyCvNyYFxM/OAqKC0RKEgsSgxN7UktQgAwOaxgjUAAAA = '), 31);' ERROR! 입력 매개 변수에 빈 문자열 또는 널 문자열 –