簡體   English   中英

弧名的python zipfile編碼

[英]python zipfile encoding for arcname

我正在嘗試使用Python的zipfile庫將多個文件添加到zip中。 問題出在壓縮的文件名中,其中包含特殊字符(utf-8)。

這是一個基本代碼:

#!/usr/bin/env python

import zipfile

infilename = "test_file"
outfilename = "test.zip"
filename = u'Conf\xe9d\xe9ration.txt'

if __name__ == '__main__':
    f = open(outfilename, "w")
    archive = zipfile.ZipFile(f, "w", zipfile.ZIP_DEFLATED)
    archive.write(infilename, filename.encode("CP437"))
    archive.close()
    f.close()

並非每個zip提取器都正確讀取生成的文件:

  • Ubuntu 10.04和11.10:Conf?d?ration.txt
    無法提取文件:“警告:文件名不匹配:Conf \\?d \\?ration.txt”

  • Windows XP和7:Confédération.txt
    可以讀取文件

  • MacOSX(Lion):ConfÇdÇration.txt
    可以讀取文件

我嘗試不對CP437進行編碼而僅將以下一行更改為:

    archive.write(infilename, filename)

這次Ubuntu仍然有同樣的問題,Windows給出了“ Conf +®d+®ration.txt”,而MacOSX則完美運行。

有人知道(pythonic)跨平台解決方案嗎?

謝謝!

看起來文件名是按“原樣”編寫的(即,第一次使用CP437編碼編寫,第二次-使用UTF8編寫),而其他歸檔處理程序使用不同的方法:

  • Windows:它將DOS / OEM編碼用於存檔內的文件名,這就是CP437起作用的原因。 並且,此行為在PKWare標准中進行了描述;
  • Mac OS:它默默使用utf-8,這違反了標准。 這就是utf8在Mac OS上運行的原因。
  • Linux / Unix:他們使用系統代碼頁作為歸檔文件中的文件名,不知道您的Linux安裝是配置到哪個目錄,而不是DOS,也不是UTF8編碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM