使用Python make_archiv压缩后,MacOS PostScript Typ 1字体为0字节

问题描述 投票:0回答:2

我有一堆旧的Mac PostScript Typ 1字体,我想在zip文件中压缩。在压缩包含字体的文件夹后,我解压缩了zip文件,所有字体显示为0字节,不再可用。

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

Mac PostScript Type 1 Fonts before compression

像这样,压缩后:Mac PostScript Type 1 Fonts after compression

我的代码:

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

使用nativ MacOS存档程序压缩font-directory不会损坏字体。

更新:我试图通过命令行(终端)使用原始的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
2个回答
1
投票

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

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

您的zip命令使用-X标志,该标志故意排除扩展文件属性和其他内容,其中可能包括资源分支。


0
投票

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

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

import os
os.system("ditto -ck --rsrc --keepParent directory_to_zip zipped_file.zip")
© www.soinside.com 2019 - 2024. All rights reserved.