首页 > 编程语言 >Python3中zipfile模块文件名乱码问题

Python3中zipfile模块文件名乱码问题

时间:2023-03-21 22:45:40浏览次数:34  
标签:编码 name 文件名 zipfile 乱码 cp437 Python3

在zipfile.ZipFile中获得的filename有中日文则很大可能是乱码,这是因为

在zip标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),而zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。

可见编码被正确识别为utf8时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为乱码了。所以解决的方法在于被decode为cp437后重新再手动转为正确的编码。具体代码如下:

#这里是在ZipFile.infolist()方法获得的info中取得filename
name = info.filename
try:
    #使用cp437对文件名进行解码还原
    name = name.encode('cp437')
    #win下一般使用的是gbk编码
    name = name.decode("gbk")
except:
    #如果已被正确识别为utf8编码时则不需再编码
    pass

  

标签:编码,name,文件名,zipfile,乱码,cp437,Python3
From: https://www.cnblogs.com/hushaojun/p/17241886.html

相关文章

  • python3 抽象类Abstract Classes
    python3抽象类AbstractClasses抽象类可以这么理解,它就是一个模板,里面声明了子类必须定义的函数,但是对于每个函数都没有给出具体实现。所有函数的实现都是在子类中定义。......
  • python程序执行cmd乱码
    背景起源 需要svnlog-limit1获取日志(含中文), 我Python程序运行毫无问题,程序无乱码,中文可以正常解析, 但是有功能需要调用其他程序,调用(客户端)node去做一些事情, 然后莫名其......
  • python3.10带openssl
    wgethttps://mirrors.huaweicloud.com/python/3.10.10/Python-3.10.10.tgzwgethttps://www.openssl.org/source/openssl-1.1.1n.tar.gz1.安装openssltar-xfopenssl-1.1.......
  • python3中使用tf
    python3中importtf报错,记录,ubuntu18.04环境,树莓派。 1、注释掉.bashrc#source~/你的workspace/devel/setup.bash2、安装catkinbuildsudoapt-getinstallpython......
  • python3.7 + pycharm 环境安装 + pycharm使用
    遇到很多初学者的盆友,来问python环境安装的问题。。因此,这篇文章就诞生了。。因个人是windows的环境,所以本文只讲windows环境下的python安装。作为初用python的盆友,强烈......
  • python3.X版本升级3.1X
    卸载旧版本的python1、用安装包进行卸载,找到安装包2、双击后点击uninstall3、点击close 4、找到安装目录删除D:\ProgramFiles\Python39装新的版本1、去官网下......
  • 【全民Python】 Python3的Scoket服务器客户端
      一.客户端'''@File:4网络编程Socket客户端.py@Time:2023/03/1509:54:17@Author:幻世界'''#coding:utf-8fromsocketimport*print("============......
  • Mac+Python3环境安装mysqlclient包:OSError: mysql_config not found
    Django默认使用了sqlite数据库,实际过程中往往使用其他数据库,例如mysql。Django项目连接MySQL数据库必须要安装相应的驱动包,由于是Python3所以这里使用了mysqlclient包。......
  • Python3使用WOL唤醒群晖NAS
    1.pip3installwakeonlanpip3installwakeonlanLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleCollectingwakeonlanDownloadinghttps://pypi.t......
  • SpringBoot使用redisTemplate存入Redis中Key会出现乱码
    测试操作Redis把key数据存入Redis,然后通过key取出UserMapper对象。@TestpublicvoidredisCacheTest(){Stringkey=UUID.randomUUID().toString();......