最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python zipfile出现乱码怎么解决

    正文概述    2020-08-05   242

    python zipfile出现乱码怎么解决

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

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

    具体zipfile模块中的源代码如下:

    if flags & 0x800:
        # UTF-8 file names extension
        filename = filename.decode('utf-8')
    else:
        # Historical ZIP filename encoding
        filename = filename.decode('cp437')

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

    在实际过程中可以对已经先用zipfile进行解压,然后对unzip文件夹中的乱码文件直接进行重命名。具体实现过程如下:

    import os
    def an_garcode(dir_names):
        """anti garbled code"""
        os.chdir(dir_names)
        for temp_name in os.listdir('.'):
            try:
                #使用cp437对文件名进行解码还原
                new_name = temp_name.encode('cp437')
                #win下一般使用的是gbk编码
                new_name = new_name.decode("gbk")
                #对乱码的文件名及文件夹名进行重命名
                os.rename(temp_name, new_name)
                #传回重新编码的文件名给原文件名
                temp_name = new_name
            except:
                #如果已被正确识别为utf8编码时则不需再编码
                pass
            if os.path.isdir(temp_name):
                #对子文件夹进行递归调用
                an_garcode(temp_name)
                #记得返回上级目录
                os.chdir('..')
    an_garcode(os.getcwd())

    众多python培训视频,尽在python学习网,欢迎在线学习!


    起源地下载网 » python zipfile出现乱码怎么解决

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元