2011-02-15 3 views
6

Używam klasy php ZipArchive do generowania archiwum zip. Używam drugiego parametru metody addFile w celu ustawienia nazwy pliku w archiwum (ponieważ prawdziwy plik na dysku ma inną nazwę). Niektóre nazwy muszą zawierać francuskie akcenty (takie jak & eacute;). Po pobraniu archiwum akcenty nie są poprawnie wyświetlane w nazwie pliku. Jakiego kodowania powinienem używać dla nazw plików? (aplikacja używa UTF-8)Jakie kodowanie wykorzystuje ZipArchive do przechowywania nazw plików w utworzonym archiwum?

+0

Zip to dość stary format, a poprzedza Unicode. Starsze wersje tego formatu z przed 2007 r. Najprawdopodobniej używają standardowego rozszerzonego ascii. Po '07 nowa specyfikacja dopuszczała kodowanie UTF-8. Sprawdź, która wersja pliku generujesz. –

Odpowiedz

2

Pliki zip nie mają określonego kodowania; narzędzie archiwum musi odgadnąć (lub założyć) używane kodowanie. Najpierw spróbuj CP1252, a następnie stamtąd.

+1

Nie działa. Próbowałem już bez powodzenia modeli ISO-8859-1, CP1252 i CP850 – matei

+0

Jak wygląda sekwencja bajtów pliku i co ma być w tekście? –

4

Użyj kodowania DOS. Moje nazwy plików mają znaki cyrylicy, więc koduję nazwy plików od cp1251 (Windows) do cp866 (DOS), po podaniu nazwy pliku do $zip->addFile().

+0

Wielkie dzięki! Jak dokładnie wymyśliłeś jakie kodowania użyć? – YakovL

9

To jest php błąd # 53948, patrz official bug report.

Sugerowane obejście (pracował dla mnie):

$zip->addFile($file, iconv("UTF-8", "CP852", $local_name));