之前一直都知道Ubuntu操作系统中的归档管理器打开Windows系统平台上压缩的Zip文件都会出现乱码的问题,但觉得文件内容不是乱码就没有刻意去解决这个问题;空闲的时候在网上查询解决方案,几乎都是建议使用unzip -O命令来解决,而且也确实有效,但是使用命令行的方式总觉得不太方便。偶然的机会发现自己使用的Deepin 20操作系统不存在这个问题,默认自带的deepin-compressor打开Windows和Linux平台中制作的Zip文件都不会出现文件名乱码的问题,说明是有解决办法的。
由于当前使用的电脑性能比较低,需要使用Linux Mint 20 xfce操作系统,因此考虑使用临时更换软件源为Deepin源的方式来将deepin-compressor安装到Linux Mint中,其他第三方的很多软件使用这种方法成功了,但是对deepin-compressor来说就是另外一回事儿了,安装虽然也能够完成,但是电脑装完后发现软件界面显示异常,打开Zip文件就闪退,而且我的搜狗输入法也已经不能够运行了。我给deepin-compressor的作者发邮件咨询了移植的可行性,他回答也是不确定能否成功,而且解决依赖问题很复杂,极大可能性存在兼容性问题,我虽然得到了这样的回复,但也不甘心,总想尝试一下,在Github中下载了deepin-compressor项目的最新源代码,按照dtkcore、dtkgui、dtkwidget、deepin-compressor的顺序进行了编译并进行安装,编译安装的过程确实比较复杂,安装完成后原来安装的deepin-editor无法打开并且deepin-terminal无法调出右键菜单了,同时通过编译安装的deepin-compressor在启动后标题栏的按钮显示不正常,打开Zip文件就闪退,在解决无望的情况下,只有借助TimeShift软件将操作系统恢复到正常状态;
在准备彻底放弃的时候发现网上有讨论如何使用Ark软件解决Zip解码乱码的问题,但是发现他们都是使用的Arch 电脑 Linux来解决的,我觉得Arch和Ubuntu本质上是一样的,就参照他们的办法来解决这个问题,发现这种解决方法比编译deepin-compressor源代码的方式简单很多,而且有效,现在将操作方法在下面列出,希望对和我一样想解决这个问题的用户有所帮助,具体步骤如下:
1、首先要下载并安装Ark归档管理器软件,同时下载zip软件包的补丁unzip-natspec,这个补丁通过克隆的方式下载git clone https://aur.archlinux.org/unzip-natspec.git。
2、下载unzip60的源代码并进行解压缩,到官网去下载,下载地址为:https://downloads.sourceforge.net/infozip/unzip60.tar.gz。
3、以源代码打补丁的方式需要用到补丁依赖的软件包natspec,我将natspec相关的几个deb包都下载了下来,并双击安装。下载地址分别为:
https://launchpadlibrarian.net/484832538/natspec-bin_0.3.0-0astra1ppa1~focal_amd64.deb(后面两个库文件软件包安装完后,再装这个软件包)
https://launchpadlibrarian.net/484832537/libnatspec0_0.3.0-0astra1ppa1~focal_amd64.deb
https://launchpadlibrarian.net/484832536/libnatspec-examples_0.3.0-0astra1ppa1~focal_amd64.deb
https://launchpadlibrarian.net/484832534/libnatspec-dev_0.3.0-0astra1ppa1~focal_amd64.deb
4、另外编译的时候还需要libbz2的开发包,执行sudo apt-get install libbz2-dev进行安装。、
5、将克隆方式下载的补丁文件拷贝到unzip60解压出来的第一级目录中,准备执行打补丁的操作,使用打补丁的命令,逐个文件进行打补丁,具体为:
patch -p1 -i unzip-6.0-alt-natspec.patch || return 1
patch -p1 -i overflow-fsize.patch || return 1 #FS#44171
patch -p1 -i cve20149636.patch || return 1 #FS#44171
patch -i test_compr_eb.patch || return 1 # FS#43391
patch -i getZip64Data.patch || return 1 # FS#43300
patch -i crc32.patch || return 1 # FS#43300
patch -p1 -i empty-input.patch || return 1 # FS#46955
patch -p1 -i csiz-underflow.patch || return 1 # FS#46955
patch -p1 -i nextbyte-overflow.patch || return 1 # FS#46955
6、编译环境的设定,执行命令:export CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DACORN_FTYPE_NFS \
-DWILD_STOP_AT_DIR -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT \
-DUNICODE_WCHAR -DUTF8_MAYBE_NATIVE -DNO_LCHMOD -DDATE_FORMAT=DF_YMD \
-DUSE_BZIP2 -DNATIVE -DNOMEMCPY -DNO_SETLOCALE"
7、执行编译命令:make -f unix/Makefile LOCAL_UNZIP="$CFLAGS" prefix=/usr \
D_USE_BZ2=-DUSE_BZIP2 L_BZ2=-lbz2 unzips || return 1
8、执行编译命令:sudo make -f unix/Makefile prefix=/usr INSTALL_PROGRAM="install" install || return 1
9、执行安装命令:sudo install -Dm644 LICENSE /usr/share/licenses/unzip/LICENSE || return 1
10、在ARK软件中点击“设置”中的菜单项“配置Ark”,在对话框的左边点击“插件”,将libzip和p7zip两个插件前的勾选框中的√去掉,如下图所示:
11、在开始菜单中再运行Ark归档管理器软件,就没有文件名乱码的现象了,如有其他问题,欢迎交流。