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

如何在PowerShell中使用ZLibStream类压缩字符串?

在PowerShell中使用ZlibStream实现Zlib格式字符串压缩

可以使用ZlibStream类实现标准Zlib格式的字符串压缩,这正是解决你之前用GZipStream/DeflateStream无法被外部系统解码问题的核心原因:

  • GZipStream生成的是带GZip专属头和CRC校验的格式,不符合Zlib标准;
  • DeflateStream仅输出原始Deflate压缩数据,缺少Zlib规范要求的头信息和校验字段;
  • ZlibStream直接生成符合Zlib标准的压缩数据,能被绝大多数依赖Zlib格式的外部系统正确解码。

注意事项

ZlibStream是.NET 6及以上版本引入的类,因此需要使用PowerShell 7.x(基于.NET 6+),Windows PowerShell 5.1基于.NET Framework,不支持该类。

修正后的PowerShell脚本

以下是直接写入字节数组的实现方式(编码明确,避免歧义):

$stringToCompress = 'string to compress'
$encoding = [System.Text.Encoding]::UTF8

# 使用using语句自动释放资源(PowerShell 7+支持)
using ($memStream = [System.IO.MemoryStream]::new()) {
    using ($zlibStream = [System.IO.Compression.ZlibStream]::new($memStream, [System.IO.Compression.CompressionMode]::Compress)) {
        # 将字符串转换为指定编码的字节数组
        $rawBytes = $encoding.GetBytes($stringToCompress)
        # 写入压缩流
        $zlibStream.Write($rawBytes, 0, $rawBytes.Length)
        # 完成压缩并确保所有数据写入内存流
        $zlibStream.FlushFinalBlock()
    }
    # 将压缩后的字节数组转换为Base64字符串输出
    $encodedCompressedString = [System.Convert]::ToBase64String($memStream.ToArray())
    Write-Output $encodedCompressedString
}

如果你更习惯使用StreamWriter,也可以用以下写法:

$stringToCompress = 'string to compress'

$memStream = New-Object System.IO.MemoryStream
try {
    $zlibStream = New-Object System.IO.Compression.ZlibStream($memStream, [System.IO.Compression.CompressionMode]::Compress)
    # 显式指定编码避免默认编码差异
    $streamWriter = New-Object System.IO.StreamWriter($zlibStream, [System.Text.Encoding]::UTF8)
    
    $streamWriter.Write($stringToCompress)
    $streamWriter.Flush()
    $zlibStream.FlushFinalBlock()
    
    $encodedCompressedString = [System.Convert]::ToBase64String($memStream.ToArray())
    Write-Output $encodedCompressedString
}
finally {
    # 手动释放所有流资源
    $streamWriter.Close()
    $zlibStream.Close()
    $memStream.Close()
}

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:42:05