Я пытаюсь дефлировать XML в C # и кодировать его base64.Я пытался использовать DeflateStream и GZipStream, но, похоже, я получаю другой результат, чем в библиотеке узлов.
Я опубликую код узла и код 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());
}
}
}