解决zip文档乱码问题

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
回复
zrqlx126
帖子: 373
注册时间: 2007-06-22 18:52

解决zip文档乱码问题

#1

帖子 zrqlx126 » 2020-05-15 10:05

偶尔测试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下的文件
附件
unzip-default-charset.sh.txt
(464 Bytes) 已下载 107 次
file-roller_3.36.2-0ubuntu1_amd64.deb
(683.89 KiB) 已下载 109 次
列国浪子
帖子: 37
注册时间: 2012-05-31 14:25

Re: 解决zip文档乱码问题

#2

帖子 列国浪子 » 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
头像
百草谷居士
帖子: 3935
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: 解决zip文档乱码问题

#3

帖子 百草谷居士 » 2020-08-31 9:41

另外一个方法是下载peazip,peazip没有这个问题。把zip文件和peazip关联
debian 12.5 / xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
列国浪子
帖子: 37
注册时间: 2012-05-31 14:25

Re: 解决zip文档乱码问题

#4

帖子 列国浪子 » 2020-08-31 22:47

百草谷居士 写了: 2020-08-31 9:41 另外一个方法是下载peazip,peazip没有这个问题。把zip文件和peazip关联
学习,mark一下 :Haha
回复