专栏首页技术随笔[Linux] 解压zip文件中文乱码问题解决

[Linux] 解压zip文件中文乱码问题解决

在Linux下,解压电脑上的.zip文件时,有时候由于编码问题,中文文件名或者文件夹名会出现乱码……

为了方便,于是自己写了一个python的解压.zip文件的脚本,亲测可用。

脚本myunzip.py

#!usr/bin/env python2
# -*- coding utf-8

import os
import sys
import zipfile

print "processing File " + sys.argv[1]

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()

解压文件时,直接执行:

$ python myunzip.py xxx.zip

或者,先增加可执行权限,然后执行:

$ chmod +x myunzip.py
$ ./myunzip.py xxx.zip

Example:

附录(Linux下使用enca查看文件编码并转换)

在Linux做开发或者系统管理遇到乱码是经常的事情,主要Windows下中文的编码多用GB2312和GBK,而Linux下是UTF-8。很多时候 涉及到和Windows平台系统的通信免不了编码的转化,可能大部分人都用iconv库函数(包含在glib中)和iconv命令来执行编码转换,今天我要推荐的是另一个shell下编码转换工具enca。用它不仅可以转换编码,还可以查看文件的原始编码,使用上也比iconv方便一些。

Ubuntu下安装enca很简单,apt-get一下就行了。

$ sudo apt-get install enca

enca用法如下:

  • enca -L zh_CN file  检查文件的编码
  • enca -L zh_CN -x UTF-8 file  将文件编码转换为”UTF-8″编码
  • enca -L zh_CN -x UTF-8 < file1 > file2  如果不想覆盖原文件可以这样

除了有检查文件编码的功能以外,”enca”还有一个好处就是如果文件本来就是你要转换的那种编码,它不会报错,还是会print出结果来, 而”iconv”则会报错。这对于脚本编写是比较方便的事情。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [译] 基于R-FCN的物体检测题目:基于R-FCN的物体检测摘要简介方法相关工作实验总结与展望Reference

    zhwhong
  • [实用] 简书中如何编辑Latex数学公式公式示例

    zhwhong
  • CT图像肺结节识别算法调研 — CNN篇深度学习方法

    zhwhong
  • Spug - 轻量级自动化运维平台

    对于中小型企业而言,进行主机和应用的管理是比较麻烦的,应用部署往往需要直接连接服务器,再进行手动的环境配置、代码拉取、应用构建和部署发布等工作,容易出错,且耗时...

    IT大咖说
  • Dubbo源码解析实战 - 路由Router的奥秘

    集群容错中的第二个关键词Router,中文意思就是路由 前端的路由和后端的路由他们是不同的,但是思想是基本一致的. 鉴于很多技术文章都有一个诟病,就是只讲概...

    JavaEdge
  • 如何配置IntelliJ IDEA发布JavaEE项目?

    步骤1 新建或者导入项目后,选择File菜单-》Project Structure...,如下图:

    城市中的游牧民族
  • Android Gradle 多渠道打包

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    黄林晴
  • 在docker中运行Kali Linux

    当使用各种工具或创建隔离的环境时,Docker是虚拟化的绝佳替代品。Docker是轻量级的(在Linux上本机运行,没有虚拟机管理程序层),并且是不需要GUI的...

    点火三周
  • 每日算法系列【LeetCode 424】替换后的最长重复字符

    给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

    godweiyang
  • 常用的 Python 爬虫技巧总结

    用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码...

    哲洛不闹

扫码关注云+社区

领取腾讯云代金券