使用源码安装unzip,解决中文乱码问题
为什么中文乱码了?
引用
实验1:在Linux下用zip压缩两个中文名文件并命名为1.zip,
结果1:在windows98下用Winzip打开中文件名没问题。
实验2: 在windows98下用Winzip压缩相同的两个中文名文件并命名为2.zip,
结果2:在Linux下用Unzip打开中文名出来的完全不对,但长度一致。
实验3: 用二进制查看器比较两个压缩文件(1.zip,2.zip),
结果3:发现两个压缩文件中的文件名二进制编码是完全一样的。
实验4: Unzip比较两个压缩文件的信息
结果4: 除文件名不同以外,就是类型(type)不同,一个是Unix,一个是fat。
结论:
winzip存文件名的方法与Unzip完全相同,
问题在Unzip中,它将类型为fat的压缩文件中的文件名作了另外的解释。
下面来看下解决办法:
使用源码安装unzip,解决中文乱码问题
1. 下载unzip-5.52:http://rays.openrays.org/RAYSLX/pool/main/u/unzip/
2. 卸载linux系统自带的unzip:
#rpm -e unzip
3. 解压文件:
#tar zxvf unzip_5.52.orig.tar.gz
4. 进入unzip目录
#cd unzip-5.52
5. 找到文件 unzpriv.h (修改内容大概在文件末尾),修改以下内容:
/* Convert filename (and file comment string) into "internal" charset.
* This macro assumes that Zip entry filenames are coded in OEM (IBM DOS)
* codepage when made on
* -> DOS (this includes 16-bit Windows 3.1) (FS_FAT_)
* -> OS/2 (FS_HPFS_)
* -> Win95/WinNT with Nico Mak's WinZip (FS_NTFS_ && hostver == "5.0")
* EXCEPTIONS:
* PKZIP for Windows 2.5 and 2.6 flag their entries as "FS_FAT_", but the
* filename stored in the local header is coded in Windows ANSI (ISO 8859-1).
* Likewise, PKZIP for UNIX 2.51 flags its entries as "FS_FAT_", but the
* filenames stored in BOTH the local and the central header are coded
* in the local system's codepage (usually ANSI codings like ISO 8859-1).
*
* All other ports are assumed to code zip entry filenames in ISO 8859-1.
*/
#ifndef Ext_ASCII_TO_Native
# define Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr) \
if (((hostnum) == FS_FAT_ && \
!(((islochdr) || (isuxatt)) && \
(hostver) >= 25 && (hostver) <= 26)) || \
(hostnum) == FS_HPFS_ || \
((hostnum) == FS_NTFS_ && (hostver) == 50)) { \
_OEM_INTERN((string)); \
} else { \
_ISO_INTERN((string)); \
}
#endif
注释其他语句,只留_ISO_INTERN((string)),修改如下:
#ifndef Ext_ASCII_TO_Native
# define Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr) \
/* if (((hostnum) == FS_FAT_ && \
* !(((islochdr) || (isuxatt)) && \
* (hostver) >= 25 && (hostver) <= 26)) || \
* (hostnum) == FS_HPFS_ || \
* ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \
* _OEM_INTERN((string)); \
* } else { \ */
_ISO_INTERN((string)); \
/* } */
#endif
6. 复制unix编译文件到当前目录下
#cp unix/Makefile .
7. 安装
#make prefix=/usr linux
#make prefix=/usr install
分享到:
相关推荐
在Linux环境中,当我们尝试使用`unzip`命令解压包含中文文件名的压缩包时,经常会出现中文乱码的问题。这是因为`unzip`程序在处理非ASCII字符时,可能会使用其内部默认的编码方式,而这个编码方式并不支持中文字符集...
解决Red Hat 6.9系统No more mirrors to try问题; 1.查看 unzip 是否被安装 rpm -qa | grep unzip 2.先安装unzip: rpm -ivh unzip-6.0-5.el6.x86_64.rpm 3.再安装zip: rpm -ivh zip-3.0-1.el6_7.1.x86_64.rpm
共同讨论这部分源码意味着,开发者社区可以一起参与源码的改进,分享遇到的问题和解决方案,从而提升解压缩库的稳定性和效率。如果你在使用过程中遇到问题,可以通过讨论区或代码托管平台(如GitHub)提出问题,寻求...
"zip库(解决文件名中文乱码问题).zip" 提供了一个针对C++编程语言的解决方案,专门用于处理ZIP文件中中文文件名的乱码问题。这个问题在处理包含非ASCII字符(例如中文字符)的文件时经常出现,因为标准的ZIP库可能不...
一些情况下, 服务器不联网, 则安装一些常用的命令比较麻烦, 本资源提供 Centos 离线安装 zip 和 unzip 命令和安装方法, 文件包含 unzip-6.0-21.el7.x86_64.rpm 和 zip-3.0-11.el7.x86_64.rpm以及安装命令。
在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...
除了使用unzip命令,我们还可以安装7-zip来解压zip文件,配合convmv使用解决乱码问题。安装7-zip和convmv的命令是sudo apt-get install convmv p7zip-full,解压zip文件的命令是 LANG=C 7z e zip_file | convmv -f ...
网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...
【标题】:Zip和Unzip源码 在IT领域,压缩和解压缩是常见的数据处理操作,用于减小文件大小,便于存储和传输。Zip格式是其中最流行的一种,广泛应用于各种操作系统和软件中。本资源提供的是一套基于zlib1.1.4库的...
解决 Linux 系统 unzip 解压后中文名乱码的问题可以使用四种方法:使用 Python 脚本、使用 unzip 命令指定字符集、在环境变量中指定 unzip 参数、使用 Java 的 jar 命令解压 zip 文件。每种方法都可以解决中文名乱码...
`ZipUtil`是一个专门用于文件压缩的工具类,它解决了在处理包含中文字符的文件或目录时可能出现的乱码问题。`ZipEntry`是Java标准库`java.util.zip`包中的核心类,用于表示ZIP文件中的一个条目,它可以是文件或目录...
在Linux操作系统中,`unzip`命令用于解压缩`.zip`格式的压缩文件。然而,有时在新安装或精简版的Linux系统中...同时,了解如何在没有内置命令的情况下解决问题,是Linux系统管理中的基本技能,有助于提升系统维护效率。
这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...
无论你是普通用户还是开发者,理解并掌握Unzip5的使用和源码编译,都将极大地提升你的工作效率和解决问题的能力。通过阅读源码,你可以了解到压缩文件的内部结构,学习如何编写高效的文件处理程序,甚至可以参与到...
一些情况下, 服务器不联网, 则安装一些常用的软件则比较麻烦, 本资源提供 Linux离线安装zip和unzip软件和安装命令, 文件包含 unzip-6.0-21.el7.x86_64.rpm 和 zip-3.0-11.el7.x86_64.rpm
如果系统提示缺少依赖关系,你可以先尝试安装缺失的依赖,使用`apt-get`命令解决: ```bash sudo apt-get install -f ``` 如果安装过程中遇到任何问题,可能需要先更新系统的软件包列表,确保所有依赖项都能找到,...
但有时,为了自动化脚本或与Linux环境保持一致性,我们需要在命令行中使用`zip`和`unzip`命令。这篇内容将详细介绍如何在Windows上安装和使用这两个命令。 1. **安装zip和unzip命令** - 首先,你需要下载包含`zip`...
在Linux操作系统中,`unzip`命令用于解压缩`.zip`格式的文件,而`rpm`则是一个软件包管理器,主要用于安装、升级、查询、验证RPM(Red Hat Package Manager)格式的软件包。本篇文章将深入探讨如何在Linux系统中通过...
当我们在Linux环境下安装Oracle数据库(如Oracle 11g)时,如果使用的字符集与系统默认字符集不一致或存在兼容性问题,就有可能出现安装界面上的文字显示为乱码的情况。这不仅会影响用户体验,还可能对后续的配置和...
这个资源是针对该插件的源代码进行修改后的版本,目的是解决在执行“搜索歌词”功能时,中文搜索结果出现乱码的常见问题。通过编译安装这个修改后的源码包,用户可以期待一个更顺畅且无乱码的中文歌词搜索体验。 ...