issue
原本在Linux环境下的python3.7能够正常打tar包的代码,升级python3.10之后,下载tar包到Windows下解压,发现文件名含有中文的文件消失了。并且多出了一个@PaxHeader文件。
cause
查了一下,网上大多说法是Linux下的tar命令加上 --format=gnu,没有我想要的答案。
顺着format的线索,看了下tarfile源码。发现3.10和3.7的默认format格式有变。
python3.10默认为PAX_FORMAT
python3.7默认为GNU_FORMAT
官方文档上说明了,python3.8之后默认format由GNU_FORMAT变为PAX_FORMAT
solution
使用tarfile时候指定format参数为GNU_FORMAT就行了
# -*- coding: utf-8 -*-
import tarfile
with tarfile.open("xxx.tar", "w", format=tarfile.GNU_FORMAT) as tar:
tar.add("xxxxx", arcname="xxxx")