星期三, 12月 19, 2012

Owncloud中文目錄包裹下載

Owncloud提供私有雲端儲存環境的自由軟體解決方案,目前4.5版中文支援已經很完整,但是早期ZIP壓縮檔內的檔名不支援utf-8,所以使用ZIP格式下載整個目錄或多個檔案時大部分解縮軟體無法正確處理utf-8編碼的檔名,造成檔案目錄有中文亂碼問題。修改lib/files.php如下,可以將壓縮檔中的檔名改為以big-5編碼。



public static function zipAddDir($dir,$zip,$internalDir=''){
                $dirname=basename($dir);

    $dirname=iconv("UTF-8", "Big-5", $dirname); // for utf-8

                $zip->addEmptyDir($internalDir.$dirname);
                $internalDir.=$dirname.='/';
                $files=OC_Files::getdirectorycontent($dir);
                foreach($files as $file){
                        $filename=$file['name'];
                        $file=$dir.'/'.$filename;
                        if(OC_Filesystem::is_file($file)){
                                $tmpFile=OC_Filesystem::toTmpFile($file);
                                OC_Files::$tmpFiles[]=$tmpFile;

$filename=iconv("UTF-8", "Big-5", $filename); // for utf-8
                               $zip->addFile($tmpFile,$internalDir.$filename);

                        }elseif(OC_Filesystem::is_dir($file)){
                                self::zipAddDir($file,$zip,$internalDir);
                        }
                }
        }


 ---------------------------------------------------


 foreach($files as $file) {
 $file=$dir.'/'.$file;
 if(OC_Filesystem::is_file($file)) {
 $tmpFile=OC_Filesystem::toTmpFile($file)
;
 self::$tmpFiles[]=$tmpFile;
$u8filename=iconv("UTF-8", "Big-5", basename($file));   //for utf-8
 $zip->addFile($tmpFile,$u8filename);
 }elseif(OC_Filesystem::is_dir($file)) {
 self::zipAddDir($file,$zip);
 }
 }





2013/10/1補充
http://www.bandicam.com/bandizip/
是一套可以切換文字編碼的壓縮解壓縮軟體,使用bandizip就可以解開檔名為utf-8編碼的zip檔。
 

沒有留言: