在我的php应用程序中,我执行了以下操作:
$dn = sys_get_temp_dir() . '/' . uniqid('td', false);
if (mkdir($dn) === true)
{
$fn = $dn . '/' . '関連事業調査.xls';
$writer = new \PHPExcel_Writer_Excel5($wb);
$writer->save($fn);
$fzip = sys_get_temp_dir() . '/' . uniqid('td', false) . '.zip';
$password = $this->container->getParameter('ZipPassword');
$out = null;
$ret = null;
exec("zip -qjP $password $fzip $dn" . '/*', &$out, &$ret);
}
在linux环境中,它使用给定的密码正确创建zip文件。我可以在Linux中解压缩文件而不会有任何问题。但是,如果我将其下载到Windows,并提取文件,文件名将变得不正确。如何解决这个问题?
答案 0 :(得分:1)
ZIP文件没有指定的文件名*编码。因此,任何非ASCII字符的使用都是完全不可靠的。
*:不完全正确:格式的扩展允许使用UTF-8文件名,zip
命令将使用它。但Windows的ZIP接口(“压缩文件夹”)不支持它,并始终使用默认(“ANSI”)代码页来解释文件名字节。如果您知道目标受众都拥有具有特定区域设置的Windows框,那么您可以定位该区域设置...否则,最好坚持使用ASCII。