×

linux解压文件名乱码

linux解压文件名乱码(linux unzip解压乱码)

admin admin 发表于2023-03-24 13:48:07 浏览51 评论0

抢沙发发表评论

本文目录一览:

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]-linux解压文件名乱码

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

上传到linux的zip解压乱码怎么解决

解压缩乱码和zip本身无关,应该是你的Linux操作系统设置的系统语言造成的。

一般来讲Linux的中文默认编码是zh_CN.UTF-8,而Windows的是GB2312,如果你在Windows创建zip压缩包,压缩包中的文件名称是按照GB2312打包的,到Linux解压缩自然成了乱码。-linux解压文件名乱码

解决方法有两种,可以将Linux的默认编码变为zh_CN.GBK,这可以通过修改/etc/sysconfig/i18n文件来完成;另一种方法就是改用ftp传递未经压缩的文件,这样文件名会被FTP服务自动转码。-linux解压文件名乱码

Linux系统下文件名出现中文乱码如何重命名回来

一不小心在给文件重命名的时候输入了中文字符,结果导致文件名乱码,无法通过cat, less, rm 或者mv 之类的命令操作了。

如何重新命名它,使得其恢复正常呢?

据说linux下每个文件还有一个文件节点编号,对应于每个特定的文件。可以通过find 该节点编号来执行重命名操作。

ls -i res???_out.txt

144117972422752993 res???_out.txt

前面的数字串就是节点编号

find . -inum 144117972422752993 -exec mv {} res_out.txt \;