【发布时间】:2016-11-10 16:45:13
【问题描述】:
这里有一个帖子Compress and decompress string in c# 用于在 c# 中压缩字符串。
我自己实现了相同的代码,但返回的文本几乎是我的两倍:O
我已经在大小为 87 的 json 上尝试过,如下所示:
{"G":"82f88ff5-4143-46ef-86cc-a19910f4a6b5","U":"df39e3c7-ffd3-4829-a9cd-27bfcbd4403a"}
结果是168
H4sIAAAAAAAEAC2NUQ6DIBQE5yx8l0QFqfQCnqAHqKCXaHr3jsaQ3TyYfcuXwKpeamHi0Bf9YCaSGVW6psLua5QWmifykVbPyCDJ3gube4GHet+tXZZM7Xrj6d7Z3u/W8896dVAAAVpd5rMbCaa3k1k25AD8=w8896dVAAAVpd5rMbCaa3k1k25AD8
我已将 Unicode 更改为 ASCII,但结果仍然太大 (128)
H4sIAAAAAAAEAA3KyxGAMAgFwF44y0w+JAEbsAILICSvCcfedc/70ENaYEq0FiyVJa+wdoj2LNZThDvs9FB918Xqu0ag4H1Vy3GbrG4jImYSyRVp/cDp8EZE1cAAAA=
public static string Compress(this string s)
{
var bytes = Encoding.ASCII.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());
}
}
【问题讨论】:
-
在转换为Base64之前你有没有比较过字节数?如果我没记错的话,Base64 将每个 6 位块转换为字符 en.wikipedia.org/wiki/Base64
-
@KMoussa 感谢您的回复。我已经添加了我的代码
-
是的,我使用的是 ToBase64,但我也测试过 System.Text.Encoding.ASCII.GetString(byteArray);
-
bytes.Length 和 mso.ToArray().Length 的值是多少?
-
@KMoussa 是 95 :|
标签: c# string compression