防止 7-Zip 生成的 ZIP 文件在 Mac OS X 下出现乱码

简介:

一直以来,我发现在 Mac OS X 中,不论用 Stuffit Expander 还是命令行下的 unzip,解压缩 Windows 下生成的某些 ZIP 文件时,解出来的中文文件名会变成乱码。不过,这种情况出现的次数很少,没有引起我的重视。今天终于觉得不能忍了,以几个简单关键词在 Google 上搜索,好像没有发现专门说这件事情的。于是决心花点时间研究它。

我在 Windows 下的 ZIP 文件大多数是用 7-Zip 这个自由软件生成的。虽然它的强项在于自己的 7z 格式,不过出于兼容性的考虑,我只是用它压缩 ZIP 格式文件,并解压缩所有常见的压缩文件格式。ZIP 文件标准自创立之初就没有、现在也没有记录文件名编码的信息,所以有很大一批 ZIP 文件都是以压缩包的创建者本地 locale 编码的,比如我遇到问题的几个 ZIP 文件内部的文件名就是用简体中文 GBK 编码的。而我 Mac OS X 的 locale 是 en_US.UTF-8,解开后自然不能正确识别 GBK 编码的文件名了。

阅读了 ZIP 文件格式这个 Wikipedia 条目,我发现最新的 ZIP 标准中建议使用 UTF-8 作为文件名的编码。这一点并不出乎意料,显然对于跨平台的需求,UTF-8 的编码是最理想的选择。下面的问题就是如何让 7-Zip 生成以 UTF-8 编码被压缩文件名的 ZIP 文件了。

在 Windows 下进行试验,我发现一个有意思的现象:当 Windows 系统的 locale 为简体中文(中国)时(“控制面板-区域和语言选项-高级-为非Unicode程序的语言选择 - Chinese (PRC)”),7-Zip 压缩出来的 ZIP 文件以 GBK 编码被压缩文件名;而当 Windows 系统的 locale 为英语(美国)时,压缩出来的 ZIP 文件编码竟然是 UTF-8!此外,在中文 locale 下,不论是以 GBK 还是 UTF-8 编码文件名的 ZIP 文件都能正常解开;而在英文 locale 下,只能解开 UTF-8 编码的文件,GBK 编码的文件解出来就是乱码。这表明, 7-Zip 是有处理 UTF-8 编码文件名的功能的。但是,为什么仅仅对英语(美国)代码页(也就是最基本的 ASCII )才会使用 UTF-8 呢?

继续查找,发现 UTF-8 的版本历史里面,自从 4.58 版本以来引入了 ZIP 内部文件名编码的概念。默认模式是,对于生成 ZIP 文件的文件名,如果当前 locale 代码页中有相应字符,就用当前代码页;如果没有,就使用 UTF-8。同时,7-Zip 也提供了两个模式,强制以 UTF-8 编码文件名,或强制以当前 locale 编码文件名(即不作转换)。

了解了这一点,解决方法就变得简单了:压缩 ZIP 文件时,使用 -mcu 选项强制使用 UTF-8 作为压缩文件名的编码。图形界面中的操作如下:

7-Zip Add to archive parameter

需要注意的是,7-Zip 的 Explorer shell 右键菜单中“Add to .zip” 这个项目只能以默认参数生成 ZIP 文件。如果希望生成在其他平台不出现乱码的 UTF-8 编码 ZIP 文件,就只能使用 “Add to archive…” 菜单项了。










本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/1386060,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
iOS开发 MacOS Windows
Mac air使用Boot Camp安装win10 ,拷贝 Windows 文件时出错
Mac air使用Boot Camp安装win10 ,拷贝 Windows 文件时出错
|
22天前
|
Python
文件元数据获取方法对比:`os.path` 与 `os.stat`
本文对比了Python中两种获取文件元数据的方法:`os.path`和`os.stat`。通过示例代码展示了如何获取文件大小和修改时间,并从性能、功能性和代码可读性三方面进行了详细对比。最终给出了根据具体需求选择合适方法的最佳实践建议。
24 2
|
2月前
|
iOS开发 索引 MacOS
mac文件搜索工具
【10月更文挑战第11天】
|
2月前
|
存储 Java iOS开发
MacOS环境-手写操作系统-43-dir命令的实现 和 文件写入
MacOS环境-手写操作系统-43-dir命令的实现 和 文件写入
37 0
|
2月前
|
Linux C语言 iOS开发
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
43 0
|
4月前
【科研技巧】Mac 系统如何给Endnote 20添加某篇文献信息和附加PDF文件
Mac系统下使用Endnote 20添加文献信息和PDF文件的详细步骤,包括下载.enw文件和在Endnote中导入这些文件的方法。
205 6
|
4月前
|
Linux
【Linux 或Mac系统】自动生成项目结构目录并放在README.md文件中
如何在Linux或Mac系统中使用tree命令自动生成项目结构目录,并将其格式化后放入项目的README.md文件中以展示项目结构。
112 1
|
4月前
|
SQL 关系型数据库 MySQL
Mac常用sh文件
Mac常用sh文件
35 0
|
4月前
|
内存技术
Mac 修改文件默认打开方式
Mac 修改文件默认打开方式
18 0
|
4月前
|
Windows 内存技术
Mac 播放 swf Flash文件
Mac 播放 swf Flash文件
26 0
下一篇
DataWorks