2017-03-16 51 views
0

我有我的zip文件,至少有一些文件是unziped。我的工作職能以及直到我的一些文件有這樣的療法名稱的Unicode:Unicode錯誤unziping文件

- myfile.wav 
- myfile2.wav 
- my§ile.wav 

當我嘗試用這種funcition

with closing(z), zipfile.ZipFile(io.BytesIO(z.content)) as myzip: 
       myzip.extractall(local_path) 

我得到一個統一的錯誤解壓縮。

我該如何糾正我的文件名?

+0

我認爲你應該從問題中刪除你的pt_BR文本;) – chicao

回答

0

你應該在通過extractall方法之前解碼你的文件。

with closing(z), zipfile.ZipFile(io.BytesIO(z.content)) as myzip: 
      local_path = local_path.decode('utf-8') 
      myzip.extractall(local_path) 

讀模塊中的documentation,他們明確在此:

沒有爲ZIP文件沒有正式的文件名編碼。如果你有unicode文件名,你必須在將它們傳遞給'()之前,將它們轉換爲你想要的編碼的字節串。 WinZip將所有文件名解釋爲在CP437中編碼,也稱爲DOS Latin。