国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

解決python3中解壓zip文件是文件名亂碼的問(wèn)題

2020-02-22 23:32:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在zip標(biāo)準(zhǔn)中,對(duì)文件名的 encoding 用的不是 unicode,而可能是各種軟件根據(jù)系統(tǒng)的默認(rèn)字符集來(lái)采用(此為猜測(cè)),因此zipfile中根據(jù)文件 flag 檢測(cè)的時(shí)候,只支持 cp437 和 utf-8。

具體就是查找 zipfile.py 源代碼找到下面的代碼:

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

可見(jiàn)編碼被正確識(shí)別為utf8時(shí)的情況外,都會(huì)被識(shí)別并decode為cp437編碼,但如果實(shí)際是gbk等其他編碼時(shí)就變?yōu)閬y碼了。所以解決的方法在于被decode為cp437后重新再手動(dòng)轉(zhuǎn)為正確的編碼。

具體代碼如下:

#修改代碼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('gbk')

后面一處同樣如此修改

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

親測(cè)有效!

以上這篇解決python3中解壓zip文件是文件名亂碼的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林站長(zhǎng)站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 苗栗市| 肥城市| 凭祥市| 兴海县| 平谷区| 延寿县| 苍山县| 武川县| 涪陵区| 新绛县| 尼木县| 冀州市| 北辰区| 丹棱县| 长武县| 渭南市| 长葛市| 赣州市| 阳泉市| 南昌市| 海城市| 清新县| 肃北| 安塞县| 英德市| 麻城市| 砚山县| 黎城县| 宜兰市| 西藏| 丘北县| 嵩明县| 普宁市| 五寨县| 中卫市| 唐山市| 建湖县| 克山县| 鄂托克旗| 炎陵县| 连平县|