Windows 环境解压 zip 压缩包乱码问题

2023-11-01

前言

 

最近在接受他人上传的 ZIP 压缩包时,发现解压后文件名出现了乱码,记得自己很久以前似乎把系统的编码改为了 UTF,所以盲猜是压缩包发送人的系统使用了 GBK 编码,出现了错误。

正文

探索

搜了一下,发现了知乎上一个很好的回答如下,基本就是说其实文件信息没有出问题,但是文件名编码方式通常会使用压缩方的编码。回答中给出了一种解法是使用 Bandzip 和 360 压缩 ,我是万年 7z 用户,但是却发现 7z 没有做相关的设置选项。暂时不考虑使用 Bandzip。

 如何修改压缩文件的编码? - 嘉的意外的回答 - 知乎 https://www.zhihu.com/question/384336846/answer/1148191607

首先要先保证文件是确实可以解码出正确结果的,搜了一下 Linux 环境下可以使用 unzip -O GBK来指定编码。

试了一下把压缩包拖到 Linux 系统,用下面的命令解压确实可以。

unzip -O GBK xxx.zip

所以其实到这里第一种 solution 就有了,可以直接用 Linux 的 unzip -O 来解决。(可以使用 WSL 或者容器或者虚拟机或者远程服务器)但是我这边有很多压缩包,要批量处理就要考虑 Linux 上写脚本了,另外有些场景可能不方便搬运到 Linux 环境。

Python 批量转编码(失败)

又不想换压缩软件,又不想用 Linux,想到了一种鲁莽的解法,就是直接 7z 解压不误,然后用 Python 批量处理所有文件名,把文件名字符串从 GBK 编码转 UTF-8 就好。

结果尝试后发现,直接解压后乱码的文件名,已经不再是原来的字节序列了,无法显示的字节序列已经被处理为了特殊符号,所以乱码文件名转字节序列后大致内容如下。可以看到乱码的字符已经被批量替换了,无法恢复出原始的GBK字节序列也就无法得到原来的中文内容。

���п��Էǵݹ�.cpp
b'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xd0\xbf\xef\xbf\xbd\xef\xbf\xbd\xd4\xb7\xc7\xb5\xdd\xb9\xef\xbf\xbd.cpp'
���п��Էǵݹ�.exe
b'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xd0\xbf\xef\xbf\xbd\xef\xbf\xbd\xd4\xb7\xc7\xb5\xdd\xb9\xef\xbf\xbd.exe'

直接 encode('gbk') 会报错如下:

Traceback (most recent call last):
  File "d:\xxx\filename_GBK2UTF.py", line 41, in <module>
    newfile = file.encode('gbk')
UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 0: illegal multibyte sequence

Bandizip 真香

下载链接:Windows 版本的 Bandizip · 业内领先的压缩文件解决方案 (bandisoft.com)

下载和安装都很快,自动绑定了一下后缀名,然后打开压缩包,可以看到默认还是乱码。

但是按照提示点自动检测,如下图。

 问题解决。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 环境解压 zip 压缩包乱码问题 的相关文章

随机推荐

  • java学习从入门到进阶的四个阶段送给迷茫的你

    写这篇总结 主要是记录下自己的学习经历 算是自己对知识的一个回顾 也给想要学习 Java 的提供一些参考 对于一些想要学习Java 又不知道从哪里下手 以及现在有哪些主流的 Java 技术 想必大家学习一门技术 前期都很想看到一些结果或成就
  • docker搭建rocketmq集群

    借鉴于 https www cnblogs com qdhxhz p 11096682 html 但是其中有一些错误 本人进行了修改 docker compose yml version 3 5 services rmqnamesrv a
  • RTX3060下双系统安装Ubuntu22.04并配置显卡驱动(超简单)、安装cuda12.1

    首先准备一个启动盘 准备具体步骤在此省略 在windows下准备一块未分区的磁盘空间 插入U盘重启电脑 在重启过程中一直按DEL键 不同电脑按键不同 进入BIOS界面 直接选择U盘空间 点击continue等待 其他的不用管 只需要点两下
  • JDK编译时出现乱码问题(以JDK8(1.8)和JDK17为例)

    先看代码 写个最简单的HelloWorld public class HelloWorld public static void main String args System out println Hello World System
  • 42个Python实用小例子[内附200+代码地址]

    经常有同学苦恼 学了python基础之后找不到合适的练手机会 为此 有位热心人创建了一个项目 搜集整理了一堆实用的python代码小例子 这些小例子包括但不限于 Python基础 Web开发 数据科学 机器学习等方向 短小精炼 力争让你60
  • 深度优先遍历DFS (岛屿问题)java

    算法之深度优先遍历 DFS 最近在学习DFS和BFS 所以做一些学习的笔记 这里是深度遍历 首先 比较常见的深度遍历题目就是网格题 可抽象为二维数组 在LeetCode中常见的是岛屿问题 思想 深度优先遍历的思想可以理解为 找到一个起始点S
  • Vue基础--Vue中的双向绑定v-model指令

    一 v model的作用和使用场景 1 1 v model指令介绍 期望的绑定值类型 根据表单输入元素或组件输出的值而变化 可以下下面元素使用
  • BSM的两个基本问题与python实现(欧式期权定价公式)

    在我们的定义中 定量分析是数学或统计学方法在市场数据上的应用 John Forman BSM定价模型的两个基本问题 隐含波动率 以某些到期日的期权报价倒推出这些期权的隐含波动率 并汇出图表 这是期权交易者和风险管理者每天都要面对的任务 蒙特
  • c++ 引用 函数重载

    定义一个学生的结构体 包含学生的姓名 年龄 成绩 性别 学生的成绩 姓名 定义为私有权限 定义一个学生类型的结构体变量 设置公有函数用于给学生的成绩和名字进行赋值 结构体中的函数 结构体中声明 结构体外定义 include
  • 8个常用JavaScript对象方法

    1 Object assign 作用 将所有可枚举的自身属性从一个或多个源对象复制到目标对象 语法 Object assign target sources 参数 target 目标对象 应用源属性的对象 修改后返回 sources 源对象
  • 管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)

    根据所学的知识 写一个管理系统 顺便总结一些知识点 准备 前端用vue cli的框架 后端用jdbc连接数据库 项目部署tomcat服务器来完成交互 前端的vue cli框架搭建可以看 点击跳转 的第二小结 后端的tomcat在idea里的
  • 团队管理之PDP大法

    PDP 是什么 为什么有些人会谈PDP色变呢 人常常会对自己不了解的东西感到恐惧 一 什么是PDP 团队管理中的PDP可能指 Personal Development Plan 个人发展计划 它是一种用于帮助团队成员提升个人能力和达成职业目
  • 关键节点与邻居搜索:K-Core算法对比K-Hop算法的效能较量

    文章首发地址 K Core算法 K Core算法是一种网络分析算法 用于发现网络中的核心节点 核心节点是指在网络中具有重要影响力的节点 它们连接着大量其他节点 是网络中的重要信息传播和控制中心 K Core算法通过逐步删除网络中度小于K的节
  • 文件上传 —— 靶场upload-labs-master

    链接 https pan baidu com s 1I7nwmMdt9XB2AbcYQJ3 eA 提取码 1234 简介 个人学习记录 目录 一 前端js验证 二 mime类型绕过 三 黑名单绕过 四 htaccess文件配置文件漏洞 无过
  • xml系列篇之xml解析

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于xml的相关操作吧 目录 Welcome Huihui s Code World 是什么 为什么要使用 优点 辉辉小贴士 xml在数据库辅助类中的应用 辉辉小
  • QListWidget的查找项方法findItems的使用(Python)

    QListWidget的查找项方法findItems的使用 Python 在PyQt中 QListWidget是一个用于显示列表视图的控件 它允许用户查看和选择其中的项 QListWidget提供了一些方便的方法 用于在列表中查找特定的项
  • Cadence设计原理图常用导出方案

    电路工作到了后期需要汇报或者写文章需要设计原图 这里整理一下Cadence设计原理图常用导出方案 前期工具用的好 后期处理没烦恼 Cadence自带工具其实很强大 只是你没尝试用 仿真环境 虚拟机Linux下Cadence617 原理图绘制
  • 手把手教你走进Hyperledger Fabric

    现在 Blockchain是业内新的热门话题 但是 寻找良好的资源来学习这项引人入胜的技术并不是一件容易的事 为了让其他人更容易学习 我开始在区块链和分布式分类帐技术 DLT 平台领域开展一系列工作 我将尽力涵盖每一步都需要掌握这些技术 首
  • 普通用户编译安装升级make(gmake)

    问题 编译安装glibc时报错提示make的版本低 需要手动编译安装 网上的资料大多是用管理员权限安装 然后修改系统环境 但是我只有普通用户的权限 将过程记录下来 下载 编译安装 wget https ftp gnu org gnu mak
  • Windows 环境解压 zip 压缩包乱码问题

    前言 最近在接受他人上传的 ZIP 压缩包时 发现解压后文件名出现了乱码 记得自己很久以前似乎把系统的编码改为了 UTF 所以盲猜是压缩包发送人的系统使用了 GBK 编码 出现了错误 正文 探索 搜了一下 发现了知乎上一个很好的回答如下 基