php zip 编码,encoding - 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的...
事情起源于在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包内的文件是在何种编码的系统下创建的...相关推荐
- python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。
前一篇文章介绍了如何用python自动解压缩加密的zip文件, 但是有一个问题,在服务器端脚本在解加密zip文件之前,需要检测其是否是加密文件,若是,则询问密码,结合密码解压缩:如果不是,则则直接解压 ...
- python字典编码_Python列表,字典,元组,字符串操作,文件操作,字符编码
1. 列表操作 1.1 列表的定义: names = ["wangjing", "wangjun", "hashiqi"] names[0] ...
- mfc检测一个目录是否产生新文件_细数Java8中那些让人纵享丝滑的文件操作
在丑陋的 Java I/O 编程方式诞生多年以后,Java终于简化了文件读写的基本操作. 打开并读取文件对于大多数编程语言来是非常常用的,由于 I/O 糟糕的设计以至于很少有人能够在不依赖其他参考代码 ...
- java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗
[Java] 纯文本查看 复制代码import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件 .
这么多年来,数据压缩对我们来说是非常有用的.无论是在邮件中发送的图片用的zip文件还是在服务器压缩数据文件,我们都可以让下载更容易或者有效的节约磁盘空间.某些压缩格式有时允许我们以60%的比率(甚至更 ...
- Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
在Linux下面去压缩文件或者目录.我们将学习zip, tar, tar.gz和tar.bz2等压缩格式的基本用法. zip格式已成为压缩文件的标准选择,而且它在windows上也能使用. 经常用zi ...
- linux如何安装zip文件格式,如何在Linux下创建与解压,安装zip, tar, tar.gz和tar.bz2文件...
zip可能是目前使用得最多的文档压缩格式.它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用.缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在 ...
- html批量转码工具,文件转码工具(文件GBK与UTF编码批量转码工具)
这是一个将批量的txt文件转换成Unicode编码的工具,转换的速度快,使用简单. 什么是Unicod编码? Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.Unicode 是 ...
- [专栏精选]Unity中编码Encoding脱坑指南
本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 大智:"昨 ...
最新文章
- 摸鱼上招聘网站的小伙伴们注意了!监控系统可能已经把你设为“离职高危”......
- Winform中使用zxing实现二维码生成(附dll下载)
- android图片编解码architecture
- 美国东北大学khoury计算机学院,2021年美国东北大学计算机研究生专业有哪些?入学要求高吗?...
- Apollo进阶课程㉓丨Apollo规划技术详解——Motion Planning with Environment
- python 判断是否有余数_判断多个坐标是否在同一条直线上|Python练习系列[13]
- 工业互联网联盟发布工业物联网安全框架
- pythonexcel模块哪个好_Python-Excel 模块哪家强?
- 力扣(LeetCode)56
- python+java家庭理财个人理财管理系统记账系统
- win7安装打印机 计算机,Win7如何安装网络打印机丨Win7安装网络打印机解决方法...
- linux隔离磁盘坏道,Repartion Bad Drive(硬盘坏道隔离工具
- Oracle rman中restore和recover的区别
- 常量和常变量(const)
- html给页面添加艺术型边框,如何为2016word的页面设置艺术型页面边框
- Python 位操作符(Bitwise)
- Linux下通过已连上无线的真机使虚拟机可上网
- 广州市 如何报计算机模块,【求助】广州到底去哪里报考计算机等级考试
- DIV+CSS三行两列经典布局
- 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析
热门文章
- CRM 里面table download to excel的实现
- 三千多天之前我没有编辑完的技术文档
- 一个12年ABAP开发专家和ABAP那些事儿
- SAP CRM HANA report filter的工作原理
- oracle rownum 特别慢,select * from table where rownum=1怎么会特别慢??表的数据在千万左右...
- 版权监控中心怎么关闭_防火门监控系统让消防通道疏散更安全
- java编写k线_用Java绘制K线 (转)
- python读取大文件内容_Python模块linecache处理大文件
- hashmap删除指定key_HashTable和HashMap的区别详解
- MySql安装及Navicat连接(解决Starting the server失败;mysql输入密码登录报错1045(28000),不输入密码却能登录;Navicat连接报错2059)