«iso-8859-1» не является поддерживаемым исключением имени кодировки при распаковке сжатой строки в Silverlight 5 с использованием DotNetZip (Ionic.Zlib)

У меня есть служба WCF, используемая клиентом Silverlight. В службе я создаю строку (которая представляет файл .csv) и сжимаю ее. Когда я пытаюсь распаковать его на клиенте, я получаю следующее исключение:

System.ArgumentException: «iso-8859-1» не является поддерживаемым именем кодировки.
Имя параметра: name
в System.Globalization.EncodingTable.internalGetCodePageFromName(имя строки)
в System.Globalization.EncodingTable. GetCodePageFromName(имя строки)
в System.Text.Encoding.GetEncoding(имя строки)
в Ionic.Zlib.GZipStream..cctor()}

Мне не удалось найти никакой информации о том, что вызывает это и как этого избежать. Буду благодарен за любую помощь!

Используемый код следующий:

Услуга:

private static byte[] Zip(string str)
{
        var bytes = Encoding.UTF8.GetBytes(str);

        using (var msInput = new MemoryStream(bytes))
        using (var msOutput = new MemoryStream())
        {
            using (var gs = new GZipStream(msOutput, CompressionMode.Compress))
            {
                msInput.CopyTo(gs);             
            }

            return msOutput.ToArray();
        }
}

Сильверлайт клиент:

private void UnzipToTheExportStream(byte[] bytes)
{
    using (var msi = new MemoryStream(bytes))
    using (_exportStream)
    {
        using (var gs = new GZipStream(msi, CompressionMode.Decompress))
        {
            gs.CopyTo(_exportStream);
        }
    }
}

Исключение происходит при инициализации файла GZipStream. Для распаковки я использую DotNetZip (Ionic.Zlib). Для сжатия я пробовал и DotNetZip, и System.IO.Compression (который недоступен в Silverlight), но с тем же результатом.


person Mladen Nikolov    schedule 31.07.2015    source источник


Ответы (1)


Проблема решена! По крайней мере для моего случая.

Я заметил, что пакет nuget содержит 3 библиотеки DLL (Ionic.BZip2.dll/Ionic.Zip.dll/Ionic.Zlib.dll).

Я сравнил Ionic.Zip и Ionic.Zlib в Assemply Explorer. Сравнение 2 DLL в проводнике сборок

Проблема решилась заменой референса который у меня был с Ionic.Zlib на Ionic.Zip

Кроме того, если вы декомпилируете «GZipStream» с помощью ReSharper в приведенном выше коде, когда у вас есть ссылка на Ionic.Zlib и когда у вас есть ссылка на Ionic.Zip, вы заметите некоторую разницу в «использовании». В первом нет using Ionic.Encoding;, что все объясняет :)

person Andreev Dmitri    schedule 01.02.2016
comment
Спасибо, Дмитрий, я этого не пробовал, но к тому времени, как я задал вопрос, мне не удалось найти решение, поэтому я использовал другую стороннюю библиотеку, которая работала: slsharpziplib.codeplex.com - person Mladen Nikolov; 02.02.2016