【问题标题】:MacOS PostScript Typ 1 fonts are 0 bytes after compressing with Python make_archiv使用 Python make_archiv 压缩后,MacOS PostScript Typ 1 字体为 0 字节
【发布时间】:2019-02-18 11:28:33
【问题描述】:

我有一堆旧的 Mac PostScript Typ 1 字体,我想将它们压缩到一个 zip 文件中。 压缩包含字体的文件夹后,我解压缩 zip 文件,其中的所有字体显示 0 字节并且不再可用。

压缩前它们看起来像这样:

像这样,压缩后:

我的代码:

shutil.make_archive(ordner, 'zip', ordner)

使用 nativ MacOS 归档程序压缩字体目录不会损坏字体。

更新:我尝试通过命令行(终端)使用原始 Unix-Tool 压缩我的文件。使用此代码:

zip -r -X compressed_directory.zip directory_to_be_compressed/

我得到了同样的错误结果。 所以我认为我遇到了一个位于 Mac OS 更深层次的问题。

更新:根据 benwiggy 的建议,我尝试了以下方法,但没有 -X 标志。结果相同:

 zip -r compressed_directory.zip directory_to_be_compressed/

【问题讨论】:

    标签: python-3.x macos zip shutil


    【解决方案1】:

    旧的 Type 1 PostScript 字体使用 MacOS Resource fork 来存储它们的数据。文件系统的这一部分并不总是能被 Unix 工具很好地处理,除非它们被明确地编写来应对 Mac 资源分叉。

    MacOs CLI 中捆绑的 zip 实用程序应默认包含资源分支(自 10.3 起)。 python util 可能无法访问 Mac 友好的实用程序。

    您的 zip 命令使用 -X 标志,它故意排除扩展文件属性和其他可能包括资源分叉的东西。

    【讨论】:

    • 谢谢你,你的回答让我思考并做一些谷歌工作,并提出了这篇优秀的文章:blog.jay2k1.com/2010/02/03/… 我想我的资源叉有一些问题,不会包含在使用 unix 或 python 工具的 zip 文件。我必须做更多的搜索,如果我找到了解决方案,我会告诉你。
    【解决方案2】:

    在对旧的 MacOS 资源叉进行进一步研究和大量测试之后,我发现如果不使用本机“存档实用程序”或其他一些工具,就无法将旧 MacOS Post Script Type 1 字体的资源叉包含到 .zip 文件中其他第三方工具,例如 Keka。 Python shutil.make_archiv() 命令不包括此类文件的资源分支,Unix 命令行工具 zip 也不包括。 我在 Xhalees 的博客上找到了一些关于这个主题的有用信息(非常好的和全面的解释):http://xahlee.info/UnixResource_dir/macosx.html

    我想出的解决方案是在 Python 中使用 os module 调用 MacOS Terminal ditto 命令,然后让它工作。

    import os
    os.system("ditto -ck --rsrc --keepParent directory_to_zip zipped_file.zip")
    

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多