DotNetZip проблема с кодированием

Я использую DotNetZip. Когда я архивирую файл с английским именем, все нормально. но когда я архивирую файл с русскими именами, получается архив с плохими именами файла. Некоторые люди сказали, что строка

ZipConstants.DefaultCodePage = 866;

Но это не компилируется. Я также использую свойства zip.UseUnicodeAsNecessary и преобразовываю имена файлов в utf8 и utf7.


person Xaver    schedule 02.04.2010    source источник
comment
извините, я немного запутался между этими двумя библиотеками: icharpcode.net/OpenSource/SharpZipLib dotnetzip.codeplex.com/releases/view/27890 в первую очередь действительно работает так, как я хочу. но мне очень интересно, как это сделать на втором. потому что вторая библиотека имеет хорошие классы, что умеет: добавлять файлы, папки в архивы.   -  person Xaver    schedule 02.04.2010
comment
Не преобразовывайте имена файлов в utf8 самостоятельно, оставьте это библиотеке, чтобы сделать это за вас.   -  person Hans Passant    schedule 02.04.2010
comment
Указанная вами константа не существует в DotNetZip. Кроме того, нет необходимости преобразовывать ваши имена файлов из utf-8 в utf-7 или что-то еще. DotNetZip выполнит для вас кодировку строк в выбранной вами кодовой странице. см. cheeso.members.winisp.net/DotNetZipHelp /html/   -  person Cheeso    schedule 07.04.2010
comment
Попробуйте использовать msdn.microsoft .com/en-us/library/ в .net 4.5   -  person juFo    schedule 15.11.2016


Ответы (3)


Чтобы создать zip-файл в формате Unicode в DotNetZip:

using (var zip = new ZipFile())
{
   zip.UseUnicodeAsNecessary= true;
   zip.AddFile(filename, "directory\\in\\archive");
   zip.Save("archive.zip");
}

Если вам нужна конкретная, конкретная кодовая страница, вы должны использовать что-то еще:

using (var zip = new ZipFile())
{
   zip.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(866);
   zip.AddFile(filename, "directory\\in\\archive");
   zip.Save("archive.zip");
}

Прежде чем использовать эти свойства, проверьте документацию!

person Cheeso    schedule 06.04.2010
comment
UseUnicodeAsNecessary устарел, поэтому рекомендуется использовать приведенный ниже код: zip.AlternateEncodingUsage = ZipOption.Always; zip.AlternateEncoding = Кодировка.UTF8; - person David; 31.10.2012


person    schedule
comment
Проводник Windows не поддерживает zip-файлы в кодировке UTF-8. Чтобы прочитать созданный вами zip-файл, вам придется использовать инструмент или библиотеку, поддерживающую юникод, например WinRar, DotNetZip и т. д. - person Lin Song Yang; 19.05.2015
comment
Я успешно открыл zip-файл UTF-8 на своем компьютере с Windows 8.1. - person Funbit; 15.06.2015