我正在尝试在C#中压缩一个XML并将其编码为Base64。我尝试使用DeflateStream和GZipStream,但似乎与在node库中执行不同。
以下是node代码和C#代码:
//zlib = require('zlib');
zlib.deflateRaw(xml, (function(_this) {
return function(err, deflated) {
return deflated.toString('base64');
}
}
C# DeflateStream
private static byte[] Deflate(String str)
{
using (MemoryStream output = new MemoryStream())
{
using (DeflateStream gzip =
new DeflateStream(output, CompressionMode.Compress))
{
using (StreamWriter writer =
new StreamWriter(gzip, System.Text.Encoding.UTF8))
{
writer.Write(str);
}
}
return output.ToArray();
}
}
C#的GZipStream
public static byte[] Zip(string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(mso, CompressionMode.Compress))
{
//msi.CopyTo(gs);
CopyTo(msi, gs);
}
return mso.ToArray();
}
}
C# Base64编码:
private static string Base64Encode(byte[] textBytes)
{
return System.Convert.ToBase64String(textBytes);
}
我有所遗漏吗?
更新
我找到了一个可以使用的示例。通过使用这个示例,我也可以在Node中对其进行解码。
var bytes = Encoding.UTF8.GetBytes(stringToDeflate);
using (var output = new MemoryStream())
{
using (var zip = new DeflateStream(output, CompressionMode.Compress))
{
zip.Write(bytes, 0, bytes.Length);
}
var base64 = Convert.ToBase64String(output.ToArray());
}
更新 2(有效代码 - 供未来搜索者使用)
private static string DeflateAndEncode(string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
using (var output = new MemoryStream())
{
using (var zip = new DeflateStream(output, CompressionMode.Compress))
{
zip.Write(bytes, 0, bytes.Length);
}
var base64 = Convert.ToBase64String(output.ToArray());
return base64;
}
}
private static string DecodeAndInflate(string str)
{
var utf8 = Encoding.UTF8;
var bytes = Convert.FromBase64String(str);
using (var output = new MemoryStream())
{
using (var input = new MemoryStream(bytes))
{
using (var unzip = new DeflateStream(input, CompressionMode.Decompress))
{
unzip.CopyTo(output, bytes.Length);
unzip.Close();
}
return utf8.GetString(output.ToArray());
}
}
}
new StreamWriter(gzip)
而不是UTF-8编码吗? - Freggar