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

怎么解。。。

回复内容:

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

怎么解。。。

LZ 的 id 看着眼熟 ... 这么多年了还在问这个等级的问题 ... 你也不容易啊你 ...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 ... 纯英文的文件就别捣乱了 ...

应该是有编码问题,举例说明:mac下的压缩,如果文件是中文名,到win下面解压的时候全部是乱码。所以在mac下面压缩的时候,都尽量只用英文文件名。

11年的时候,有人提过类似问题:http://bbs.csdn.net/topics/370123319 ,文中的解决方案是说:查看http://www.pkware.com/documents/cases...,并搜索“Info-ZIP Unicode Path Extra Field”

搜索完这段内容:4.6 Third Party Mappings

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

4.6.1 Third party mappings commonly used are:

0x07c8 Macintosh

0x2605 ZipIt Macintosh

0x2705 ZipIt Macintosh 1.3.5+

0x2805 ZipIt Macintosh 1.3.5+

0x334d Info-ZIP Macintosh

0x4341 Acorn/SparkFS

0x4453 Windows NT security descriptor (binary ACL)

0x4704 VM/CMS

0x470f MVS

0x4b46 FWKCS MD5 (see below)

0x4c41 OS/2 access control list (text ACL)

0x4d49 Info-ZIP OpenVMS

0x4f4c Xceed original location extra field

0x5356 AOS/VS (ACL)

0x5455 extended timestamp

0x554e Xceed unicode extra field

0x5855 Info-ZIP UNIX (original, also OS/2, NT, etc)

0x6375 Info-ZIP Unicode Comment Extra Field

0x6542 BeOS/BeBox

0x7075 Info-ZIP Unicode Path Extra Field

0x756e ASi UNIX

0x7855 Info-ZIP UNIX (new)

0xa220 Microsoft Open Packaging Growth Hint

0xfd4a SMS/QDOS

希望有用。

@Ven 就是文件名的编码吧,稍微改了下楼上的代码,我的系统是linux,所以要把非UTF-8的重新编码为UTF-8open($zipfile_name);

if(true !== $res)

throw new Exception('Can Not Open Zip File '.$res);

$encoding = "UTF-8";

$controller = array("ASCII","UTF-8", "GB2312", "GBK", "BIG5");

for($i = 0; $i < $zip->numFiles; ++ $i){

$entry = $zip->getNameIndex($i);

$encoding = mb_detect_encoding($entry, $controller);

if( "UTF-8" !== $encoding)

$entry = iconv($encoding, "UTF-8", $entry);

echo $entry." ---> ".$encoding.chr(10);

}

$zip->close();

}

detect_encoding($argv[1]);

?>

正确答案见@Sunyanzi 的回答,这里再补充一些。

由于Windows系统的历史原因,部分压缩软件生成的zip包,在用mb_detect_encoding()检查文件名的编码时,会得到类似“CP936”这样的结果。我当时在这里被搞晕了,以为函数没能正确检测到编码。实际上CP936是微软自己的一套标准,基本上等于GBK。

而关于其他的“CP***”的编码对应关系,或许可以参看这篇文章:Windows代码页

ZIP格式,似乎文件名没有编码这一说。

至于你说的解压缩出现乱码,这是解压缩软件的问题……

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php zip 编码,encoding - 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的...相关推荐

  1. python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。

    前一篇文章介绍了如何用python自动解压缩加密的zip文件, 但是有一个问题,在服务器端脚本在解加密zip文件之前,需要检测其是否是加密文件,若是,则询问密码,结合密码解压缩:如果不是,则则直接解压 ...

  2. python字典编码_Python列表,字典,元组,字符串操作,文件操作,字符编码

    1. 列表操作 1.1 列表的定义: names = ["wangjing", "wangjun", "hashiqi"] names[0] ...

  3. mfc检测一个目录是否产生新文件_细数Java8中那些让人纵享丝滑的文件操作

    在丑陋的 Java I/O 编程方式诞生多年以后,Java终于简化了文件读写的基本操作. 打开并读取文件对于大多数编程语言来是非常常用的,由于 I/O 糟糕的设计以至于很少有人能够在不依赖其他参考代码 ...

  4. java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗

    [Java] 纯文本查看 复制代码import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...

  5. 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件 .

    这么多年来,数据压缩对我们来说是非常有用的.无论是在邮件中发送的图片用的zip文件还是在服务器压缩数据文件,我们都可以让下载更容易或者有效的节约磁盘空间.某些压缩格式有时允许我们以60%的比率(甚至更 ...

  6. Linux下创建与解压zip, tar, tar.gz和tar.bz2文件

    在Linux下面去压缩文件或者目录.我们将学习zip, tar, tar.gz和tar.bz2等压缩格式的基本用法. zip格式已成为压缩文件的标准选择,而且它在windows上也能使用. 经常用zi ...

  7. linux如何安装zip文件格式,如何在Linux下创建与解压,安装zip, tar, tar.gz和tar.bz2文件...

    zip可能是目前使用得最多的文档压缩格式.它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用.缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在 ...

  8. html批量转码工具,文件转码工具(文件GBK与UTF编码批量转码工具)

    这是一个将批量的txt文件转换成Unicode编码的工具,转换的速度快,使用简单. 什么是Unicod编码? Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.Unicode 是 ...

  9. [专栏精选]Unity中编码Encoding脱坑指南

    本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 大智:"昨 ...

最新文章

  1. 摸鱼上招聘网站的小伙伴们注意了!监控系统可能已经把你设为“离职高危”......
  2. Winform中使用zxing实现二维码生成(附dll下载)
  3. android图片编解码architecture
  4. 美国东北大学khoury计算机学院,2021年美国东北大学计算机研究生专业有哪些?入学要求高吗?...
  5. Apollo进阶课程㉓丨Apollo规划技术详解——Motion Planning with Environment
  6. python 判断是否有余数_判断多个坐标是否在同一条直线上|Python练习系列[13]
  7. 工业互联网联盟发布工业物联网安全框架
  8. pythonexcel模块哪个好_Python-Excel 模块哪家强?
  9. 力扣(LeetCode)56
  10. python+java家庭理财个人理财管理系统记账系统
  11. win7安装打印机 计算机,Win7如何安装网络打印机丨Win7安装网络打印机解决方法...
  12. linux隔离磁盘坏道,Repartion Bad Drive(硬盘坏道隔离工具
  13. Oracle rman中restore和recover的区别
  14. 常量和常变量(const)
  15. html给页面添加艺术型边框,如何为2016word的页面设置艺术型页面边框
  16. Python 位操作符(Bitwise)
  17. Linux下通过已连上无线的真机使虚拟机可上网
  18. 广州市 如何报计算机模块,【求助】广州到底去哪里报考计算机等级考试
  19. DIV+CSS三行两列经典布局
  20. 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析

热门文章

  1. CRM 里面table download to excel的实现
  2. 三千多天之前我没有编辑完的技术文档
  3. 一个12年ABAP开发专家和ABAP那些事儿
  4. SAP CRM HANA report filter的工作原理
  5. oracle rownum 特别慢,select * from table where rownum=1怎么会特别慢??表的数据在千万左右...
  6. 版权监控中心怎么关闭_防火门监控系统让消防通道疏散更安全
  7. java编写k线_用Java绘制K线 (转)
  8. python读取大文件内容_Python模块linecache处理大文件
  9. hashmap删除指定key_HashTable和HashMap的区别详解
  10. MySql安装及Navicat连接(解决Starting the server失败;mysql输入密码登录报错1045(28000),不输入密码却能登录;Navicat连接报错2059)