Вычеркнуть строку C# - PullRequest
       106

Вычеркнуть строку C#

3 голосов
/ 25 марта 2020

Я пытался дефлировать строку, полученную из соединения с веб-сокетом, но каждый раз, когда я пытаюсь запустить этот код, я получаю сообщение об ошибке. Я также пытался получить байты непосредственно из строки с кодировкой ascii, но она также не работала.

public static byte[] Decompress(string input)
{

    byte[] data = Convert.FromBase64String(input)
    byte[] decompressedArray = null;

    using (MemoryStream decompressedStream = new MemoryStream())
    {
        using (MemoryStream compressStream = new MemoryStream(data))
        {
            using (DeflateStream deflateStream = new DeflateStream(compressStream, CompressionMode.Decompress))
            {
                deflateStream.CopyTo(decompressedStream);
            }
        }
        decompressedArray = decompressedStream.ToArray();
    }
    return decompressedArray;
}

System.IO.InvalidDataException:"Длина блока не совпадает с его дополнением. "

Я пробовал несколько разных вариантов этого кода, но ничего не получалось, но я знаю, что это возможно, потому что я могу спустить его с этим сайтом http://www.txtwizard.net/compression и выкачать . опция

1012 * Один из примеров строки я хочу выкачать: 1014 * eAGdVMmO2kAU / BXUc3WYXr1wy3LIKYqUjHKIo6jtboODsVG72YT491SbIWMYkcNgiX4uv6pXr7efxHXdatYvtDPs8Qf7wkh0JF3xx5a + J7MjUVnKK8tsQbOEJqyQ2pQ0kSJ8s6118wOZcSlpROp2q411n7Xb2t5bAzyO5SkiymjDdFLaSgpZJCZOK6NYTINE7ztnx1pMifg0kAwrK16mqTSWSl4VcWGVGkiLOniTjKJqa / ф + ky314Xu9ghBXIpFZSoPEXK / sCyqylAWTVRfKrTqDbLLrXGMIcrd1v9ENkGNOfE5mOXE5iXKyRywSBAcEFOMOI + MIFghijD1GkKq6aRDlpGh0uRy4vXfd0g7gDpYRIb1b67L2g9qUq9Mpb / 9VRF0keDQ0cD5 + fZo89Xp + 5gUjUuB7oDKMl7pdG9LpNL3Sas7uGT6JZEpVIIYXNg3hniOU6TQb8PAC / H9WNs7Z1t / YgfDAB50P0bMl3dTzFmBOGlvB3JWxmyb5VIrJ40Se7QZX8Vh07OleS 2FSXjckxtSbou + 31mFe77cjIfmmZlLMZbBz3Ygce7nXhryzMsDH9JtWPmzKpfWTbzhG450yWhr1tqXJsix93QnExmZGvcgwZ5ct9rLHBjRsMIXNBiqJyKa37vlqUYZJQ1NDVZEmlRA6sfgL5 / N3jfsDl8 + djLNKiwMeDrGvnG6XkC60mQ + 3ИТ + sw2XAI1J2TecYsh60KbQtkDVAPEA8VpXJLhDuNPLAdHgArbXTKzJ7F4uIVE29JjPvNvaE36 + / hpSDkQ ==

1 Ответ

2 голосов
/ 25 марта 2020

Строка (JSON), вероятно, взята из GZipStream .
Вы можете использовать этот другой поток для распаковки содержимого данных:

► Вам нужно. Net Framework 4.7.2+ для правильной распаковки данных.

Как примечание, сжатый формат немного выключен . Подпись сжатых данных, 78 : 01, может указывать на то, что это сжатая строка ZLib, поэтому. Net DeflateStream , основанный на ZLib (из. NET Framework 4.5), должен распаковать данные.
И 7-Zip, и WinZip не могут открыть данные (поток, сохраненный в виде двоичного файла).

using System.IO;
using System.IO.Compression;
using System.Text;

public static byte[] Decompress(string input)
{
    byte[] data = Convert.FromBase64String(input)

    using (var decompressedStream = new MemoryStream())
    using (var compressStream = new MemoryStream(data))
    using (var gzip = new GZipStream(compressStream, CompressionMode.Decompress)) {
        gzip.CopyTo(decompressedStream);
        return decompressedStream.ToArray();
    }
}

JSON имеет кодировку UTF8 (это также относится к строке ASCII):

string json = Encoding.UTF8.GetString(Decompress(base64String));

В результате (. Net Fidddle ):

[
   "room:shard1/W1N1",
   {
      "objects":{
         "5982fe1eb097071b4adc0743":{
            "energy":2440,
            "invaderHarvested":2664
         },
         "5dad1a7cef434b7d68fd5160":{
            "store":{
               "energy":1536
            }
         },
         "5dd1cf2c884de042fb6be550":{
            "hits":4100,
            "nextDecayTime":25374980
         }
      },
      "gameTime":25373981,
      "info":{
         "mode":"world"
      },
      "visual":"{\"t\":\"r\",\"x\":37,\"y\":0,\"w\":12,\"h\":6,\"s\":{\"fill\":\"black\",\"stroke\":\"white\",\"opacity\":0.25}}\n{\"t\":\"t\",\"text\":\"CPU Usage\",\"x\":43,\"y\":1,\"s\":{\"font\":0.8}}\n{\"t\":\"l\",\"x1\":37.05,\"y1\":1.5,\"x2\":48.95,\"y2\":1.5}\n{\"t\":\"t\",\"text\":\"Current Usage\",\"x\":37.5,\"y\":2.5,\"s\":{\"align\":\"left\"}}\n{\"t\":\"t\",\"text\":\"2.43 / 4\",\"x\":46.5,\"y\":2.5}\n{\"t\":\"l\",\"x1\":37.05,\"y1\":3,\"x2\":48.95,\"y2\":3}\n{\"t\":\"t\",\"text\":\"Average Usage\",\"x\":37.5,\"y\":4,\"s\":{\"align\":\"left\"}}\n{\"t\":\"t\",\"text\":\"2.82\",\"x\":46.5,\"y\":4}\n{\"t\":\"l\",\"x1\":37.05,\"y1\":4.5,\"x2\":48.95,\"y2\":4.5}\n{\"t\":\"t\",\"text\":\"Bucket Storage\",\"x\":37.5,\"y\":5.5,\"s\":{\"align\":\"left\"}}\n{\"t\":\"t\",\"text\":9998,\"x\":46.5,\"y\":5.5}\n{\"t\":\"l\",\"x1\":44,\"y1\":1.55,\"x2\":44,\"y2\":5.95}\n",
      "users":{
         "595d14d08d05b87f33a7e33a":{
            "_id":"595d14d08d05b87f33a7e33a",
            "username":"wtfrank",
            "badge":{
               "type":22,
               "color1":"#adbaeb",
               "color2":"#265fd9",
               "color3":"#1a1a1a",
               "param":-63,
               "flip":true
            }
         }
      }
   }
]
...