@KoRNeT46RuS

Как решить проблему кодировки в zip архиве php с ubuntu на windows?

Делаю архив zip средствами php на убунту. На убунту все норм. Переношу на windows - там кракозябры. Пробовал перекодировать в windows-1251. Отображает кириллицу, но вместо слов "фяьимфуиайщукщ" и прочая лабуда. Как решить проблему?
  • Вопрос задан
  • 7521 просмотр
Пригласить эксперта
Ответы на вопрос 6
Мне как-то помогла программа Bandizip, позволяющая выбрать кодировку исходного архива. Полагаю, при распаковке нужно выбрать кодировку UTF-8.
Ответ написан
SagePtr
@SagePtr
Еда - это святое
7-zip использует кодировку cp866 для русских имён файлов, добавленных в zip-архив. Попробуйте её.
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Сталкивался я с такой проблемой, когда пытался архивировать на FreeBSD файлы, лежащие на примонтированной виндовой шаре. Решения я не нашел, пришлось велосипедить - сделал несколько патчей на tar :) и он при архивировании имена файлов перекодировал из koi8-r в что скажешь.
Давным-давно я в том месте не работаю, но патчи где-то сохранились, если надо - мыло в профиле.
Ответ написан
Комментировать
Adamos
@Adamos
А что вы "пробовали перекодировать"?
Проблема только в том, что zip хранит имена файлов в однобайтовой кодировке, и на русских виндах это cp1251.
Содержимое файлов архивируется совершенно одинаково.
Так что достаточно не называть архивируемые файлы кириллицей.
Ответ написан
Комментировать
romy4
@romy4
Exception handler
> ZIP uses a default codepage of IBM437
> So it is impossible to create a ZIP file with non-ASCII filenames that work across different countries' releases of Windows and their built-in compressed folder support.
> If you need a non-ASCII archive format you'll have to use one of the newer formats, such as recent 7z or rar.
а так же tar.gz пакует в utf-8
просто смените архиватор
Ответ написан
Комментировать
syamskoy
@syamskoy
Когда добавляешь в архив файлы, используй функцию смены кодировки:
$charset = 'windows-1251'; // Для Windows
// ...
$zip->addfile($file, iconv($charset, '866//TRANSLIT', $file));


или меня архиватор.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы