您好,匿名用户
随意问技术百科期待您的加入

用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的

0 投票

事情起源于在WIN下创建的zip放到linux下解压时,中文路径和文件名会出现乱码,于是动手写了个脚本转换zip内文件名的代码。但是,如果是在日语、韩语或者繁体字WIN系统下建立的zip,由于不知道原始编码格式,导致无法转码。
怎么解。。。

用户头像 提问 2014年 2月17日 @ Nero 上等兵 (377 威望)
分享到:

1个回答

0 投票
 
最佳答案

LZ 的 id 看着眼熟 ... 这么多年了还在问这个等级的问题 ... 你也不容易啊你 ...

<?php
/* well ... prepare our zip file ... */
$zip = new ZipArchive;
$res = $zip->open( '/path/to/your.zip' );

/* can not open ..? are you kidding me ..? */
if ( true !== $res )
    throw new Exception( 'Can Not Open Zip File / ' . $res );

/* default value of file encoding ... */
$encoding = 'EMTPY';

/* controller ... change this if mb_detect_encoding return wrong answer ... */
$controller = null;

/* get file list ... */
for ( $i = 0; $i < $zip->numFiles; ++ $i ) {

    /* get file encoding ... */
    $encoding = mb_detect_encoding( $zip->getNameIndex( $i ), $controller );

    /* we do not need english named files ... */
    if ( 'ASCII' !== $encoding ) break;

}

/* clean table ... */
$zip->close();

/* simply output ... */
echo $encoding;

代码就是这样了 ... 根据文件名来判断系统 ...

简体中文的 windows 会返回 EUC-CN ... 繁体中文我猜测应该是 EUC-TW 或者 BIG5 ...

Linux 和 MacOS 都是 UTF-8 ... 纯英文的文件就别捣乱了 ...

用户头像 回复 2014年 2月17日 @ Gragas 上等兵 (254 威望)
选中 2013年 9月7日 @Nero
提一个问题:

相关问题

0 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ LeBlanc 上等兵 (289 威望)
+1 投票
1 回复 37 阅读
用户头像 提问 2013年 10月2日 @ Galio 上等兵 (289 威望)
0 投票
1 回复 46 阅读
0 投票
0 回复 25 阅读
0 投票
1 回复 41 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...