首页 > 编程语言 >【Python笔记2.2】用zipfile解压zip包时遇到的Unicode字符编解码问题

【Python笔记2.2】用zipfile解压zip包时遇到的Unicode字符编解码问题

时间:2023-01-30 17:13:57浏览次数:60  
标签:编解码 None zip Python try file dec decode

python unicode字符编解码问题参见【Python笔记2.1】
python中用zipfile解压zip包网上资料一堆,这里就不多说了。
下面使用【Python笔记2.1】中总结出来的字符编解码函数来解决zipfile解压zip包的问题。时间仓促,直接上代码。

完整示例代码(含【Python笔记2.1】中的代码)

# -*- coding: utf-8 -*-
#!/usr/bin/env python2
"""
Created on Mon Jul 23 15:40:00 2018

@author: 
"""
import os
import zipfile


# UTF_8_BOM = b'\xef\xbb\xbf'


def un_zip(filepath, dst_dir):
    try:
        encoding = 'utf-8'
        dst_dir = try_encode(dst_dir, encoding)
        zip_file = zipfile.ZipFile(filepath)
        for names in zip_file.namelist():
            unzip_file = zip_file.extract(names, dst_dir)
            rename_file = os.path.join(dst_dir, try_encode(str_decode(names), encoding))
            os.rename(unzip_file, rename_file)
        zip_file.close()
        return 0, 'unzip Success'
    except Exception as err:
        print('[un_zip]: Exception.ERROR: ', err)
        return -1, 'ERROR, unzip error! please upload the zip package named in utf-8 format.'


def try_encode(s, encoding="utf-8"):
    if s is None:
        print('[tryEncode]: input param None!')
        return s
    try:
        return s.encode(encoding)
    except UnicodeEncodeError as err:
        print(err)


def try_decode(s, decoding="utf-8"):
    try:
        return s.decode(decoding)
    except UnicodeDecodeError as err:
        print(err)


def str_decode(string):
    while True:
        dec = try_decode(string, "utf-8")
        if dec is not None:
            break
        dec = try_decode(string, "ascii")
        if dec is not None:
            break
        dec = try_decode(string, "GB2312")
        if dec is not None:
            break
        dec = try_decode(string, "GBK")
        if dec is not None:
            break
        dec = try_decode(string, "Big5")
        if dec is not None:
            break
        print('[str_decode]: unknown encoding')
        dec = None
        break

    return dec
 

标签:编解码,None,zip,Python,try,file,dec,decode
From: https://www.cnblogs.com/lidabo/p/17076656.html

相关文章

  • 【KAWAKO】python查看内存空间占用情况
    目录查看变量的内存占用查看运行内存占用查看变量的内存占用importsysc=1145.114print(sys.getsizeof(c))查看运行内存占用importpsutilmemory=psutil.vir......
  • python实用小技之数据结构
     本文大多数例子搬自pythoncookbook这里是对学习的一个总结和提炼ps:python版本为python3 1.解压序列赋值给多个变量#有一个包含N个元素的元组或者是序列,怎样将......
  • python 中异常类型总结
    异常类型:异常名称描述BaseException       所有异常的基类SystemExit          解释器请求退出KeyboardInterrupt    用户中断......
  • python实战-基于正交实验(工具:allpairs)自动生成接口异常测试用例
    实现思路1.抓取api信息(目前公司用的swagger),uri、method、params、response,解析完成后写入excle2.读取抓取完毕的api信息,处理为allpairs所需要的ordereddict3.调用allpai......
  • python之路60 drf从入门到成神 1
    老刘讲课资料获取#个人博客:https,证书过期,忽略-https://www.liuqingzheng.top/#cnblogs博客(后期迁移到这里,高级部分的内容)-https://www.cnblogs.com/liuqin......
  • Python选择语句常见的三种形式!
    选择语句,也称为条件语句。即按照条件执行不同的代码片段。那么Python中选择语句是什么?在Python中,选择语句主要有3种形式,分别是:if语句、if...else语句和if...elif...els......
  • 打包python模块成whl 使用pip安装
    打包python模块目的,将写好的python库文件,打包成wheel,然后使用pip安装到系统,独立成模块。使用工具需要提前使用pip安装wheel。打包使用setuptools库......
  • C++调用Python的API总结
    最近在做C++调Python的work,简单总结下(一) 初始化和关闭Python解释器#include<Python.h>Py_Initialize();…Py_Finalize();所有的Python程序都要在这之间执行(二)......
  • C++调用python脚本
    随着机器学习/深度学习这几年的的火热,python成了当红炸子鸡,使用python训练机器学习模型则成了开发人员们最喜欢的方法,但是由于过往调度系统一般都是用C++来开发的,因此......
  • python获取系统盘符列表
    #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#需求:#动态捕获指定服务器最新发布接种应用系统路径,重......