Zip加解壓字串
阿新 • • 發佈:2022-02-20
一、首先下載引用“ICSharpCode.SharpZipLib.dll”
二、字串壓縮
/// <summary> /// 將傳入的二進位制字串資料以Zip演算法解壓縮 /// </summary> /// <param name="zippedString">經GZip壓縮後的二進位制字串</param> /// <returns>原始未壓縮字串</returns> public static string ZipDecompressString(this string zippedString) { if (string.IsNullOrEmpty(zippedString) || zippedString.Length == 0) { return ""; } else { string dummyData = zippedString; dummyData = dummyData.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+").Replace("\"", "").Replace("\\n", ""); //} byte[] b = Convert.FromBase64String(dummyData); using (MemoryStream from = new MemoryStream(b)) using (ZipInputStream zip = new ZipInputStream(from)) using (MemoryStream to = new MemoryStream()) { ZipEntry entry = zip.GetNextEntry(); byte[] buffer = new byte[1024]; int len = 0; while ((len = zip.Read(buffer, 0, buffer.Length)) > 0) { to.Write(buffer, 0, len); } b = to.ToArray(); return Encoding.UTF8.GetString(b); } } }
三、壓縮字串解壓
/// <summary> /// 將傳入字串以Zip演算法壓縮後,返回utf-8格式Base64編碼字元 /// </summary> /// <param name="rawString">需要壓縮的字串</param> /// <returns>壓縮後的Base64編碼的字串</returns> public static string ZipCompressString(this string rawString) { if (string.IsNullOrEmpty(rawString) || rawString.Length == 0) { return ""; } else { byte[] rawData = System.Text.Encoding.UTF8.GetBytes(rawString); using (MemoryStream to = new MemoryStream()) using (ZipOutputStream zip = new ZipOutputStream(to)) { ZipEntry entry = new ZipEntry("ToBase64String"); zip.PutNextEntry(entry); zip.Write(rawData, 0, rawData.Length); zip.CloseEntry(); // 必須,否則報不可預料的壓縮檔案末端 zip.Finish(); // 必須,否則報這個壓縮檔案格式未知或者資料已經被損壞 return Convert.ToBase64String(to.ToArray()); } } }