2011-02-15 7 views
6

Estoy usando la clase php ZipArchive para generar un archivo zip. Utilizo el segundo parámetro del método addFile para establecer el nombre del archivo en el archivo (ya que el archivo real en el disco tiene un nombre diferente). Algunos de los nombres deben contener acentos franceses (como & eacute;). Cuando descargo el archivo, los acentos no se muestran correctamente en el nombre del archivo. ¿Qué codificación debo usar para los nombres de los archivos? (la aplicación usa UTF-8)¿Qué codificación usa ZipArchive para almacenar nombres de archivos dentro del archivo creado?

+0

Zip es un formato bastante viejo, y anterior a Unicode. Es probable que las versiones antiguas anteriores al 2007 solo usen ascii extendido estándar. Después de '07, la nueva especificación permitió UTF-8. Compruebe qué versión de archivo está generando. –

Respuesta

2

Los archivos zip no tienen una codificación especificada; la herramienta de archivo debe adivinar (o asumir) la codificación utilizada. Primero prueba CP1252, luego ve desde allí.

+1

No funciona. He intentado con ISO-8859-1, CP1252 y CP850 sin éxito – matei

+0

¿Cómo se ve la secuencia de bytes de un nombre de archivo y qué se supone que es en el texto? –

4

Usa la codificación de DOS. Mis nombres de archivo tienen caracteres cirílicos, por lo que estoy codificando los nombres de archivo de cp1251 (Windows) a cp866 (DOS), al pasar el nombre de archivo a $zip->addFile().

+0

¡Muchas gracias! ¿Cómo has calculado exactamente qué codificaciones usar? – YakovL

9

Es php error # 53948, vea official bug report.

solución sugerida (trabajó para mí):

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