3

在我的 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 并解压缩文件,文件名就会不正确。如何解决这个问题呢?

4

1 回答 1

1

ZIP 文件没有指定的文件名编码*。因此,任何非 ASCII 字符的使用都是完全不可靠的。

*:不完全正确:允许使用 UTF-8 文件名的格式有一个扩展名,zip命令将使用它。但是 Windows 的 ZIP 接口(“压缩文件夹”)不支持它,并且总是使用默认(“ANSI”)代码页来解释文件名字节。如果您知道您的目标受众都有具有特定语言环境的 Windows 框,那么您可以定位该语言环境……否则,最好坚持使用 ASCII。

于 2013-07-22T09:04:59.700 回答