1. linux中unzip解压时中文乱码如何解决
更改源码解决乱码
调试发现问题出现在MultiByteToWideChar方法里,
如 MultiByteToWideChar(CP_ACP,0,fn,-1,tfn,MAX_PATH); 到这里时fn中的name属性值还是正常的,在这个方法内部执行完tfn就乱了。
解决方法:
打开unzip.cpp源文件,找到函数
ZRESULT TUnzip::Get(int index,ZIPENTRY *ze)
{ // ......
// ......} 12345
这个函数里有
#ifdef UNICODE
MultiByteToWideChar(CP_UTF8,0,fn,-1,tfn,MAX_PATH);#else
strcpy(tfn,fn);#endif12345
把 CP_UTF8 改为CP_ACP, ( CP_ACP 指示要使用当前设置的 API 默认 Windows ANSI 代码页)
重新编译后
这样就解决了解压中文文件名称乱码的问题
编译时解决源码问题(无需更改源码)
上面的情况,我们我观察到unzip源代码这段开始的地方有判断
#ifndef Ext_ASCII_TO_Native 1
这样问题似乎更简单了,不用改源代码,只需在make时定义 Ext_ASCII_TO_Native 即可,这样 Ext_ASCII_TO_Native 实际为一个空的宏,不进行任何转换操作。
比如,使用下面的方法编译
make -DExt_ASCII_TO_Native 1
或者在bash执行下面两行
export LOCAL_UNZIP=-DExt_ASCII_TO_Native
make12
unzip解压缩含中文文件名zip包是出现乱码的问题解决!
如果您的系统已经安装了unzip
方法一 unzip行命令解压,指定字符集
通过unzip行命令解压,指定字符集
unzip -O CP936 xxx.zip (用GBK, GB18030也可以)1
方法二 在环境变量中,指定unzip参数
在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件
/etc/environment中加入2行
UNZIP=”-O CP936″
ZIPINFO=”-O CP936″12
方法三 利用pyton来处理
复制以下内容(Python)保存未myuzip.py文件脚本,并修改运行权限为可运行(chmod +x uzip)
#!/usr/bin/env python# -*- coding: utf-8 -*-# uzip.pyimport osimport sysimport zipfileprint "Processing File " + sys.argv[1]
file=zipfile.ZipFile(sys.argv[1],"r");for name in file.namelist():
utf8name=name.decode('gbk') print "Extracting " + utf8name
pathname = os.path.dirname(utf8name) if not os.path.exists(pathname) and pathname!= "":
os.makedirs(pathname)
data = file.read(name) if not os.path.exists(utf8name):
fo = open(utf8name, "w")
fo.write(data)
fo.close
file.close()
这样以后我们解压缩时只需要运行此文件即可
./myuzip.py xxxx.zip
2. linux下zip文件解压出现乱码怎么办
是文件名乱码还是什么?
如果是文件名乱码就是系统字库的问题,更新一下相应字库应该能解决(或者强行重命名也没问题),windows下也经常会有这种问题的,不是什么太大的毛病
3. Linux 下 zip 文件解压乱码如何解决
1、这是zip格式的缺陷,zip文件格式中没有字段标志出文件名的编码格式。Windows下生成的zip文件中的编码是GBK/GB2312等,而linux下的默认编码格式为UTF-8,所以才会出现乱码。
2、解决方法
1、使用unzip解压的时候,指定字符集(需要unzip支持,有些unzip命令不支持大O选项,自己可以安装较新的unzip版本):
md5@crc4:~/$unzip-OCP936test.zip
2、借助于p7zip和convmv:
a、在Fedora下的命令是
su-c'yuminstallp7zipconvmv'
b、在ubuntu下的安装命令是
sudoapt-getinstallp7zipconvmv
安装完之后,就可以用7za和convmv两个命令完成解压缩任务。
LANG=C7zaxyour-zip-file.zip
convmv-fGBK-tutf8--notest-r.
说明:
1)、第一条命令用于解压缩,而LANG=C表示以US-ASCII这样的编码输出文件名,如果没有这个语言设置,它同样会输出乱码,只不过是UTF8格式的乱码(convmv会忽略这样的乱码)。
2)、第二条命令是将GBK编码的文件名转化为UTF8编码,-r表示递归访问目录,即对当前目录中所有文件进行转换。
4. 在linux中解压zip文件,中文字符乱码,请问如何解决。不要粘贴复制。 系统本身的字符集是utf-8
如果你文件夹中只有这一个zip文件的话,可以用命令unzip *.zip 应该就OK了
5. linux系统,文件是utf-8格式的为什么会乱码呢
乱码的问题有很多可能,第一、linux安装时是否支持中文;第二、要用命令查一下格式:echo $LANG;第三确认格式是否需要在系统中修改格式类型;第四连接终端(putty,secureCRT)等工具的编码是否和系统的编码一致,不致要改为一致就可以了。
6. 上传到linux的zip解压乱码怎么解决
解压缩乱码和zip本身无关,应该是你的Linux操作系统设置的系统语言造成的。
一般来讲Linux的中文默认编码是zh_CN.UTF-8,而Windows的是GB2312,如果你在Windows创建zip压缩包,压缩包中的文件名称是按照GB2312打包的,到Linux解压缩自然成了乱码。
解决方法有两种,可以将Linux的默认编码变为zh_CN.GBK,这可以通过修改/etc/sysconfig/i18n文件来完成;另一种方法就是改用ftp传递未经压缩的文件,这样文件名会被FTP服务自动转码。
7. linux下zip文件解压出现乱码怎么办
压缩包里是中文的吧, linux如果装了中文语言支持的话,把语言环境设置一下 LANG=zh_CN.utf-8