分页: 1 / 1

解决zip文档乱码问题

发表于 : 2020-05-15 10:05
zrqlx126
偶尔测试windows下压缩的zip文档时,发现乱码,其实这个问题一直存在,早在2014年的时候已经有人提交了bug(可以参考https://bugs.launchpad.net/ubuntu/+sour ... ug/1382106),但是可惜的是一直没有得到官方的重视。记得早先的ubuntu中文版本团队对这个问题进行过处理,不知为什么没有继续坚持下来。通过各种搜索,发现了ubuntu日本团队对个问题的解决方案,其实解决方法也很简单,下面详细说明:
首先,通过对语言环境的判断,对unzip的编码进行预先在设定参数,也就是添加"-O"参数来使用正确的编码进行读取。使用root用户执行以下命令,在/etc/profile.d下生成一个文件。

代码: 全选

cat > /etc/profile.d/unzip-default-charset.sh << "EOF"
locale=${LC_ALL:-$LC_CTYPE}
locale=${locale:-$LANG}
locale=${locale%%.*}

case "$locale" in
    ja_JP)
        charset=CP932
    ;;
    ko_KR)
        charset=CP949
    ;;
    th_TH)
        charset=CP874
    ;;
    vi_VN)
        charset=CP1258
    ;;
    zh_CN)
        charset=CP936
    ;;
    zh_TW)
        charset=CP950
    ;;
    *)
        charset=
    ;;
esac

if [ -n "$charset" ]; then
    export UNZIP="-O $charset"
    export ZIPINFO="-O $charset"
fi
EOF
这样以来,使用unzip解压windows下压缩的zip文件即可避免乱码,但是,使用归档管理器(file-roller)依然乱码,这就需要针对file-roller源代码进行更改了,在ubuntu源中添加源代码源,更新源后下载file-roller源代码,并为源代码打补丁

代码: 全选

sudo apt update
apt source file-roller
#最新版本为3.36.2
cd file-roller-3.36.2/debian/patches
cat > disable_p7zip-full_for_zip.patch << "EOF"
--- a/src/fr-command-7z.c
+++ b/src/fr-command-7z.c
@@ -593,7 +593,6 @@
 	"application/x-ms-dos-executable",
 	"application/x-ms-wim",
 	"application/x-rar",
-	"application/zip",
 	NULL
 };
 
@@ -640,21 +639,16 @@
 			capabilities |= FR_ARCHIVE_CAN_READ;
 
 		if (_g_mime_type_matches (mime_type, "application/x-cbz")
-		    || _g_mime_type_matches (mime_type, "application/x-ms-dos-executable")
-		    || _g_mime_type_matches (mime_type, "application/zip"))
+		    || _g_mime_type_matches (mime_type, "application/x-ms-dos-executable"))
 		{
 			capabilities |= FR_ARCHIVE_CAN_WRITE | FR_ARCHIVE_CAN_ENCRYPT;
 		}
 	}
 	else if (_g_program_is_available ("7za", check_command)) {
-		if (_g_mime_type_matches (mime_type, "application/vnd.ms-cab-compressed")
-		    || _g_mime_type_matches (mime_type, "application/zip"))
+		if (_g_mime_type_matches (mime_type, "application/vnd.ms-cab-compressed"))
 		{
 			capabilities |= FR_ARCHIVE_CAN_READ;
 		}
-
-		if (_g_mime_type_matches (mime_type, "application/zip"))
-			capabilities |= FR_ARCHIVE_CAN_WRITE;
 	}
 
 	/* multi-volumes are read-only */
EOF
echo "disable_p7zip-full_for_zip.patch" >> series
cd ../../
tar Jcvf ../file-roller_3.36.2-0ubuntu1.debian.tar.xz debian/
# 安装编译依赖
sudo apt install debhelper-compat dh-sequence-gnome itstool libarchive-dev libglib2.0-dev libgtk-3-dev libjson-glib-dev libmagic-dev libnautilus-extension-dev libnotify-dev meson
# 开始编译
dpkg-buildpackage 
# 安装
sudo dpkg -i ../file-roller_3.36.2-0ubuntu1_amd64.deb
再行测试已经不再出现乱码的问题了,至此问题解决。
附件是已经编译好的file-roller包和需要放在/etc/profile.d下的文件

Re: 解决zip文档乱码问题

发表于 : 2020-08-30 13:38
列国浪子
赞一个。
水平有限,只能直接拿来主义。
安装附件中的deb包后,如果直接update,会覆盖安装,所以我将之固定暂时保持不变。
拿来主义的小伙伴可以参考:
保持某软件版本不变,如file-roller,(已测有效@Ubuntu 20.04.1)

代码: 全选

sudo apt-mark hold file-roller
这样 upgrade 时就不会升级 覆盖了
如果需要恢复原来的设定,执行如下命令:

代码: 全选

sudo apt-mark unhold file-roller

Re: 解决zip文档乱码问题

发表于 : 2020-08-31 9:41
百草谷居士
另外一个方法是下载peazip,peazip没有这个问题。把zip文件和peazip关联

Re: 解决zip文档乱码问题

发表于 : 2020-08-31 22:47
列国浪子
百草谷居士 写了: 2020-08-31 9:41 另外一个方法是下载peazip,peazip没有这个问题。把zip文件和peazip关联
学习,mark一下 :Haha