我压缩使用此代码Gzip已字符串:压缩和解压缩字符串只会产生原始字符串的第一个字母?
public static String Compress(String decompressed)
{
byte[] data = Encoding.Unicode.GetBytes(decompressed);
using (var input = new MemoryStream(data))
using (var output = new MemoryStream())
{
using (var gzip = new GZipStream(output, CompressionMode.Compress, true))
{
input.CopyTo(gzip);
}
return Convert.ToBase64String(output.ToArray());
}
}
,并使用此代码解压缩它:
public static String Decompress(String compressed)
{
byte[] data = Convert.FromBase64String(compressed);
using (MemoryStream input = new MemoryStream(data))
using (GZipStream gzip = new GZipStream(input, CompressionMode.Decompress))
using (MemoryStream output = new MemoryStream())
{
gzip.CopyTo(output);
StringBuilder sb = new StringBuilder();
foreach (byte b in output.ToArray())
sb.Append((char)b);
return sb.ToString();
}
}
当我在此示例代码中使用这些功能,结果是只信S
:
String test = "SELECT * FROM foods f WHERE f.name = 'chicken';";
String com = Compress(test);
String decom = Decompress(com);
Console.WriteLine(decom);
如果我调试的代码,我看到的decom
值是
S\0E\0L\0E\0C\0T\0 \0*\0 \0F\0R\0O\0M\0 \0f\0o\0o\0d\0s\0 \0f\0 \0W\0H\0E\0R\0E\0 \0f\0.\0n\0a\0m\0e\0 \0=\0 \0'\0c\0h\0i\0c\0k\0e\0n\0'\0;\0
但显示的值只是字母S
。
修正了这个问题。为了安全起见,我在两种方法中都将'Encoding.Unicode'更改为'Encoding.UTF8'。谢谢!一旦延迟到期,我会接受。 –