http://blog.csdn.net/michaell_zhang/article/details/5979883
C# クライアントが PHP SOAP WebService にアクセスする場合送信 大量のテキスト データの場合は、圧縮することでネットワーク送信を削減できます。
C# では、データを圧縮および解凍するために、System.IO.Compression 名前空間の下に GZipStream クラスと DeflateStream クラスという 2 つのクラスが用意されています。実験した結果、C# で GZipStream を使用して圧縮された文字列は、PHP では gzuncompress 関数を使用して解凍できません。gzdecode を使用すると解凍できるという人もいますが、私の PHP は gzdecode 関数をサポートしていませんが、gzencode 関数はあります。 ? 理由は不明ですが、PHP のバグと言われており、この機能は PHP6 までは提供されない可能性があります。
C# で DeflateStream クラスを使用してテキストを圧縮した後、gzinflate を使用して PHP でテキストを解凍できます。サンプル コードは次のとおりです。
クライアント C# (最初の 4 バイトは、C# での解凍を容易にするために元のテキストの長さを増やしますが、PHP 側での解凍には役に立ちません):
public static string Compress(string text) { byte[] buffer = Encoding.UTF8.GetBytes(text); MemoryStream ms = new MemoryStream(); using (DeflateStream zip = new DeflateStream(ms, CompressionMode.Compress, true)) { zip.Write(buffer, 0, buffer.Length); } ms.Position = 0; MemoryStream outStream = new MemoryStream(); byte[] compressed = new byte[ms.Length]; ms.Read(compressed, 0, compressed.Length); byte[] gzBuffer = new byte[compressed.Length + 4]; System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length); System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4); return Convert.ToBase64String(gzBuffer); }
? サーバー側 PHP:
?
function Decompress($strSource){ $strTemp = base64_decode($strSource); $strTemp = substr($strTemp, 4); return gzinflate($strTemp);}
? 中国語をサポートし、UTF8 としてエンコードされます。
?
http:/ /blog.csdn.net/allsharps/article/details/7357328
/// <summary> /// 简单的压缩 /// </summary> public static class CompressHelper { /// <summary> /// 压缩字符串 /// </summary> /// <param name="str"></param> /// <returns></returns> public static byte[] CompressString(string str) { return CompressBytes(Encoding.UTF8.GetBytes(str)); } /// <summary> /// 压缩二进制 /// </summary> /// <param name="str"></param> /// <returns></returns> public static byte[] CompressBytes(byte[] str) { var ms = new MemoryStream(str) {Position = 0}; var outms = new MemoryStream(); using (var deflateStream = new DeflateStream(outms, CompressionMode.Compress, true)) { var buf = new byte[1024]; int len; while ((len = ms.Read(buf, 0, buf.Length)) > 0) deflateStream.Write(buf, 0, len); } return outms.ToArray(); } /// <summary> /// 解压字符串 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string DecompressString(byte[] str) { return Encoding.UTF8.GetString(DecompressBytes(str)); } /// <summary> /// 解压二进制 /// </summary> /// <param name="str"></param> /// <returns></returns> public static byte[] DecompressBytes(byte[] str) { var ms = new MemoryStream(str) {Position = 0}; var outms = new MemoryStream(); using (var deflateStream = new DeflateStream(ms, CompressionMode.Decompress, true)) { var buf = new byte[1024]; int len; while ((len = deflateStream.Read(buf, 0, buf.Length)) > 0) outms.Write(buf, 0, len); } return outms.ToArray(); } }
?
?