当前位置: 移动技术网 > IT编程>脚本编程>Python > zipfile 解压文件名 中文字符 乱码

zipfile 解压文件名 中文字符 乱码

2018年06月17日  | 移动技术网IT编程  | 我要评论

怪王外传续集,创维电视售后电话,七彩连珠在线游戏

unzip 中文文件名乱码

项目需求及BUG现象:

上传一个.zip格式的压缩文件

解压该test.zip压缩文件

解压zip文件时,遍历其目录下所有子文件,同时计算出单个子文件的有效代码行数

 

这时,发现解压后的子文件名中文出现乱码,如下图:

 

BUG截图

 

解决思路

1、解压过程中,发现解压的文件内容正常;

2、使用的是第三方库zipfile模块,因为第1步得到正常的文件内容,本地业务逻辑可先不排查;

3、首先检查zipfile的源码中,针对编码/解码的执行过程仔细排查发现:

zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8

找到下面两处,并追加修正后,乱码现象解决:(追加的decode编码可根据实际情况修改,如linux环境下乱码采用.decode('gbk'))

# zipfile.py

# 第一处
if flags & 0x800:
    # UTF-8 file names extension
    filename = filename.decode('utf-8')
else:
    # Historical ZIP filename encoding
    filename = filename.decode('cp437')
    # 追加此句
    filename = filename.encode("cp437").decode('utf-8')

# 第二处
if zinfo.flag_bits & 0x800:
    # UTF-8 filename
    fname_str = fname.decode("utf-8")
else:
    fname_str = fname.decode("cp437")
        # 追加此句
    fname_str = fname_str.encode("cp437").decode('utf-8')

解决后,正常显示:

 

(完) 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网