在zip標準中,對文件名的 encoding 用的不是 unicode,而可能是各種軟件根據系統的默認字符集來采用(此為猜測),因此zipfile中根據文件 flag 檢測的時候,只支持 cp437 和 utf-8。
創(chuàng)新互聯服務項目包括肅寧網站建設、肅寧網站制作、肅寧網頁制作以及肅寧網絡營銷策劃等。多年來,我們專注于互聯網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯網行業(yè)的解決方案,肅寧網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到肅寧省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!具體就是查找 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')
可見編碼被正確識別為utf8時的情況外,都會被識別并decode為cp437編碼,但如果實際是gbk等其他編碼時就變?yōu)閬y碼了。所以解決的方法在于被decode為cp437后重新再手動轉為正確的編碼。
具體代碼如下:
#修改代碼 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')
網站題目:解決python3中解壓zip文件是文件名亂碼的問題-創(chuàng)新互聯
標題來源:http://www.rwnh.cn/article18/dciigp.html
成都網站建設公司_創(chuàng)新互聯,為您提供企業(yè)建站、定制開發(fā)、虛擬主機、商城網站、外貿網站建設、App開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯