gpt4 book ai didi

c# - 在 C# 中压缩字符串并在 python 中解压缩

转载 作者:太空狗 更新时间:2023-10-30 02:32:33 26 4
gpt4 key购买 nike

我正在尝试在 C# (.net 4) 的客户端程序上压缩一个大字符串,然后使用 PUT 请求将其发送到服务器(django、python 2.7)。理想情况下,我想在两端都使用标准库,所以我尝试使用 gzip。

我的 C# 代码是:

public static string Compress(string s) {
var bytes = Encoding.Unicode.GetBytes(s);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream()) {
using (var gs = new GZipStream(mso, CompressionMode.Compress)) {
msi.CopyTo(gs);
}
return Convert.ToBase64String(mso.ToArray());
}
}

python代码是:

s = base64.standard_b64decode(request)
buff = cStringIO.StringIO(s)

with gzip.GzipFile(fileobj=buff) as gz:
decompressed_data = gz.read()

它几乎可以工作,但输出是:{▯"▯c▯h▯a▯n▯g▯e▯d▯"▯},而它应该是{"changed"},即每隔一个字母都是奇怪的.如果我通过执行 decompressed_data[::2] 取出所有其他字符,那么它就可以工作,但它有点 hack,显然还有其他问题。

我想知道是否需要对 PUT 请求进行 base64 编码?只有 POST 才需要这样做吗?

最佳答案

我认为主要问题可能是 C# 使用 UTF-16 编码字符串。这可能会产生与您的问题类似的问题。与任何其他编码问题一样,我们在这里可能需要一点运气,但我想您可以通过以下方式解决此问题:

decompressed_data = gz.read().decode('utf-16')

在那里,decompressed_data 应该是 Unicode,您可以这样对待它以进行进一步的工作。

更新:这对我有用:

夏普

static void Main(string[] args)
{
FileStream f = new FileStream("test", FileMode.CreateNew);
using (StreamWriter w = new StreamWriter(f))
{
w.Write(Compress("hello"));
}
}
public static string Compress(string s)
{
var bytes = Encoding.Unicode.GetBytes(s);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(mso, CompressionMode.Compress))
{
msi.CopyTo(gs);
}
return Convert.ToBase64String(mso.ToArray());
}
}

python

import base64
import cStringIO
import gzip

f = open('test','rb')
s = base64.standard_b64decode(f.read())
buff = cStringIO.StringIO(s)

with gzip.GzipFile(fileobj=buff) as gz:
decompressed_data = gz.read()
print decompressed_data.decode('utf-16')

没有 decode('utf-16) 它在控制台打印:

>>>h e l l o

它做得很好:

>>>hello

祝你好运,希望对你有所帮助!

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

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