You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中使用zlib的Deflate方法生成无效乱码字符问题求解

问题原因
  • Zlib::Deflate.deflate 方法返回的是二进制压缩数据流,本身就不属于人类可读的文本格式,直接打印或者当作普通文本输出时,就会显示为乱码,这不是压缩逻辑出错,是输出/使用方式不符合二进制数据的处理要求。
解决方案

分两种常用场景适配:

场景1:接口直接返回压缩数据给客户端

需要给Sinatra响应添加正确的HTTP头,告知客户端返回内容是deflate压缩的二进制流,避免客户端按普通文本解析:

require 'sinatra'
require 'zlib'

get '/v1/generate' do
    file_content = "teste"
    data_compressed = generate_diagram_from file_content
    # 配置响应头
    headers \
        "Content-Encoding" => "deflate",
        "Content-Type" => "application/octet-stream",
        "Content-Length" => data_compressed.bytesize.to_s
    data_compressed
end

def generate_diagram_from file_content
    Zlib::Deflate.deflate(file_content)
end

场景2:需要将压缩结果保存为可读文本

可以将二进制压缩结果转码为Base64格式,就能得到无乱码的可读字符串,使用时先解码Base64再解压即可还原原内容:

require 'base64'

def generate_diagram_from file_content
    compressed = Zlib::Deflate.deflate(file_content)
    Base64.encode64(compressed)
end
验证压缩逻辑正确性的方法

你可以通过以下代码验证压缩结果是正常的,解压后可以完全还原原始内容:

original_str = "teste"
compressed = Zlib::Deflate.deflate(original_str)
decompressed = Zlib::Inflate.inflate(compressed)
puts decompressed == original_str # 输出为true,说明压缩逻辑无问题

内容的提问来源于stack exchange,提问作者Marcos Vinícius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:45:04