public class Compresser { public static string Compress(string uncompressedString) { byte[] bytData = System.Text.Encoding.Unicode.GetBytes(uncompressedString); MemoryStream ms = new MemoryStream(); Stream s = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(ms); s.Write(bytData, 0, bytData.Length); s.Close(); byte[] compressedData = (byte[])ms.ToArray(); return System.Convert.ToBase64String(compressedData, 0, compressedData.Length); } public static string Decompress(string compressedString) { System.Text.StringBuilder uncompressedString = new System.Text.StringBuilder(); int totalLength = 0; byte[] bytInput = System.Convert.FromBase64String(compressedString); ; byte[] writeData = new byte[4096]; Stream s2 = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(new MemoryStream(bytInput)); while (true) { int size = s2.Read(writeData, 0, writeData.Length); if (size > 0) { totalLength += size; uncompressedString.Append(System.Text.Encoding.Unicode.GetString(writeData, 0, size)); } else { break; } } s2.Close(); return uncompressedString.ToString(); } }