gpt4 book ai didi

c# - 在 Python 中压缩 在 C# 中解压

转载 作者:行者123 更新时间:2023-12-01 04:48:07 24 4
gpt4 key购买 nike

问题

  1. 在python中压缩长字符串4k+
  2. 用 C# 解压

我尝试做什么:
1. Python

def deflate_and_base64_encode( string_val ):
zlibbed_str = zlib.compress( string_val )
compressed_string = zlibbed_str[2:-1]
return base64.b64encode(compressed_string )

2. C#

public static string Inflate(string pythonZipped)
{
byte[] gzBuffer = Convert.FromBase64String(pythonZipped);
using (var ms = new MemoryStream())
{
ms.Write(gzBuffer, 0, gzBuffer.Length);
var buffer = new byte[ms.Length];
ms.Position = 0;
using (var infS = new DeflateStream(ms,Ionic.Zlib.CompressionMode.Decompress, true))
{
infS.Read(buffer, 0, buffer.Length);
}
return Encoding.UTF8.GetString(buffer);
}
}

但是得到一些奇怪的结果,例如:

Python.deflate_and_base64_encode('1'*1000)

结果为MzQcBaNgFAx3AABQpr8=

C#.Inflate("MzQcBaNgFAx3AABQpr8")

结果为 11111111111111 而不是 1000 个

你能解释一下我做错了什么,或者给我其他方法来实现我想做的事情吗?

最佳答案

当开头的 2 个字符和结尾的 1 个字符被截断时,问题就开始了。 compressed_string = zlibbed_str[2:-1]

这行代码破坏了前 2 个字符中的 header 信息,甚至立即 zlib.decompress 也无法理解剩下的内容。 (我的猜测:C# 的 zlib 实现会尽最大努力在没有有效 header 的情况下重建流的剩余内容。正如您将在下面看到的,Python 的实现更为严格。)

>>> import zlib
>>> z = zlib.compress('1'*1000)
>>> c = z[2:-1]
>>> zlib.decompress(z)
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
>>> zlib.decompress(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zlib.error: Error -3 while decompressing data: incorrect header check

关于c# - 在 Python 中压缩 在 C# 中解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29007685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com