字符串GZIP压缩解压
c#
/// <summary> /// 字符串压缩解压 /// </summary> public class Zipper { public static string CompressString(string str) { str = HttpUtility.UrlEncode(str); var compressBeforeByte = Encoding.GetEncoding("UTF-8").GetBytes(str); var compressAfterByte = Compress(compressBeforeByte); string compressString = Convert.ToBase64String(compressAfterByte); return compressString; } public static string DecompressString(string str) { var compressBeforeByte = Convert.FromBase64String(str); var compressAfterByte = Decompress(compressBeforeByte); string compressString = Encoding.GetEncoding("UTF-8").GetString(compressAfterByte); return HttpUtility.UrlDecode(compressString); } /// <summary> /// Compress /// </summary> /// <param name="data"></param> /// <returns></returns> private static byte[] Compress(byte[] data) { try { var ms = new MemoryStream(); var zip = new GZipStream(ms, CompressionMode.Compress, true); zip.Write(data, 0, data.Length); zip.Close(); var buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); ms.Close(); return buffer; } catch (Exception e) { throw new Exception(e.Message); } } /// <summary> /// Decompress /// </summary> /// <param name="data"></param> /// <returns></returns> private static byte[] Decompress(byte[] data) { try { var ms = new MemoryStream(data); var zip = new GZipStream(ms, CompressionMode.Decompress, true); var msreader = new MemoryStream(); var buffer = new byte[0x1000]; while (true) { var reader = zip.Read(buffer, 0, buffer.Length); if (reader <= 0) { break; } msreader.Write(buffer, 0, reader); } zip.Close(); ms.Close(); msreader.Position = 0; buffer = msreader.ToArray(); msreader.Close(); return buffer; } catch (Exception e) { throw new Exception(e.Message); } } }
js 基于pako.js
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>zip</title> <script src="js/jquery.min.js"></script> <script src="js/pako.min.js"></script> <script type="text/javascript"> function encode() { var str = $('#content').val(); str = window.btoa(pako.gzip(encodeURIComponent(str), { to: "string" })); $('#ciphertext').text(str); } function decode() { var encodedData = $('#content').val(); var decodedData = window.atob(encodedData); var charData = decodedData.split('').map(function (x) { return x.charCodeAt(0); }); var binData = new Uint8Array(charData); var data = pako.inflate(binData); decodedData = String.fromCharCode.apply(null, new Uint16Array(data)); $('#ciphertext').text(decodeURIComponent(decodedData)); } </script> </head> <body> <input id="content" type="text"> <button onclick="encode()">encode</button> <button onclick="decode()">decode</button> <div id="ciphertext"></div> </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2015-08-24 C# 二进制字符串互转
2015-08-24 重集合中找出最相近的一个数字