我有一個具有Unicode名稱的文件,說'קובץ.txt'
。我想打包他,我正在使用python的zipfile。Python - 如何將unicode文件名轉換爲CP437?
我可以壓縮文件,稍後打開它們,但使用Windows 7文件資源管理器查看文件時(7zip很好),文件名會混淆。
根據該文檔,這是一個常見的問題,對於如何處理這一指令:
從ZipFile.write
注意
沒有ZIP文件的官方文件名編碼。如果您有 unicode文件名,,則必須先將它們轉換爲 所需的編碼中的字節字符串,然後再將它們傳遞給write()。 WinZip解釋所有 文件名稱,編碼在CP437中,也稱爲DOS Latin。
對不起,但我似乎無法得到我應該怎麼處理文件名。我試過.encode('CP437')
,.decode('CP437')
..
'zipfile'模塊使用utf-8編碼而不是cp437來處理非ascii文件名並設置'flag_bits | 0x800'同時壓縮。 utf-8編碼支持完整的Unicode範圍(忽略單獨的代理)。你可以使用Python來壓縮/解壓文件。或使用'-mcu'開關使用7-zip解壓縮。另請參閱[正確解碼zip條目文件名稱 - CP437,UTF-8或?](http://stackoverflow.com/q/13261347/4279) – jfs
更改問題的標題,與您的實際更密切相關任務,例如「用非ascii條目創建一個zip檔案」。 「קובץ。txt''從哪裏來?它是作爲命令行參數給出的嗎?什麼是你的Python版本?如果從命令行運行'py -mzipfile -c archive.zipקובץ。txt',會在包含'קובץ。txt'文件的目錄中執行什麼操作? – jfs