2017-02-08 3 views
0

zlibjruby으로 gzipped 문자열을 디코딩하려고합니다. 다음은 최소한의 작업 예제입니다.Zlib :: GzipFile :: Error : gzip 형식이 아닙니다.

require 'stringio' 
require 'zlib' 

str = 'H4sIAAAAAAAA/y2NwQrDIBAFfyXstUbWNWrir5RSrEoQUi2JOZSQf6+EHt8wzDtgKd7VVPIG9n7AMwWwYhj1MBkkwtEwcN7vq/NfsAo5MnhFt6Y8g71WcDXW9I5ggVCYHqlH0xE12RJ1N5SIwGBpJ3UPTVOKa41IssGS5z+Vhhs1SdHo9okxXPXzcf4AY45Ve6EAAAA=' 
input = StringIO.new(str) 
puts Zlib::GzipReader.new(input).read 

는 그리고 이것은 내가

/Users/duke/.rvm/rubies/jruby-1.7.23/bin/jruby --1.9 -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/duke/RubymineProjects/untitled/gzip_test.rb 
Zlib::GzipFile::Error: not in gzip format 
    initialize at org/jruby/ext/zlib/JZlibRubyGzipReader.java:156 
     new at org/jruby/ext/zlib/JZlibRubyGzipReader.java:85 
     (root) at /Users/duke/RubymineProjects/untitled/gzip_test.rb:6 
     load at org/jruby/RubyKernel.java:1059 
     (root) at -e:1 

Process finished with exit code 1 

gzip으로 압축 된 문자열이 유효 얻을 출력됩니다. 여기에서 시도해보십시오 http://www.txtwizard.net/compression

답변

2

str에는 Base64로 인코딩 된 데이터가 들어 있습니다. 그러나 Zlib::GzipReader은 자체 데이터를 디코딩하지 않지만 원시 바이너리 gzip 데이터를 필요로하므로 실패합니다.

수동 비록 당신의 StringIO 오브젝트를 작성하기 전에 데이터를 디코딩 할 수 있습니다

This simple online text compression tool is compressing a plain text and decompressing compressed base64 string with gzip, bzip2 and deflate algorithms

:도 (강조 광산)이 동작을 설명하는

require 'base64' 
require 'stringio' 
require 'zlib' 

str = 'H4sIAAAAAAAA/y2NwQrDIBAFfyXstUbWNWrir5RSrEoQUi2JOZSQf6+EHt8wzDtgKd7VVPIG9n7AMwWwYhj1MBkkwtEwcN7vq/NfsAo5MnhFt6Y8g71WcDXW9I5ggVCYHqlH0xE12RJ1N5SIwGBpJ3UPTVOKa41IssGS5z+Vhhs1SdHo9okxXPXzcf4AY45Ve6EAAAA=' 
raw = Base64.decode64(str) 
input = StringIO.new(raw) 
puts Zlib::GzipReader.new(input).read 
# => {"locations":[{"_id":1486497022087,"accuracy":50.0,"bearing":0.0,"datetime":"2017-02-07 22:50:22 +0300","latitude":55.660023,"longitude":37.759313,"speed":0.0}]} 

당신이 링크 된 웹 사이트를