列出带有特殊字符(如表情符号)的 zip 文件条目
List zip file entries with special characters like emojis
我正在编写需要列出 zip 文件中的文件条目的脚本。我的问题是,当有一个带有表情符号的条目时,CLI 没有正确输出文件名:
❯ zip -r foo.zip test/
adding: test/ (stored 0%)
adding: test/.txt (stored 0%)
src on main [!?] is v1.0.0 via v16.14.0
❯ unzip -l foo.zip
Archive: foo.zip
Length Date Time Name
--------- ---------- ----- ----
0 04-08-2022 20:54 test/
0 04-08-2022 20:54 test/�???.txt <---- here is my problem
--------- -------
0 2 files
src on main [!?] is v1.0.0 via v16.14.0
❯ unzip foo.zip test/.txt
Archive: foo.zip
extracting: test/�???.txt
有没有办法告诉 unzip
考虑特殊字符列出文件条目?
谢谢!
使用 unzip
似乎无法准确列出 zip 存档中的文件(使用 unzip 6.00
测试);你必须 select 其他工具。
我在回答中选择了perl
,因为它的核心库中具有所需的功能。这里我使用了 newline
作为分隔符 (-l
),但是如果你希望能够读取和处理输出的路径,你应该用 NULL-BYTE
(-l0
) 替换它100% 准确来自 bash:
perl -l -e '
use IO::Uncompress::Unzip;
$zip = IO::Uncompress::Unzip->new($ARGV[0]);
while($zip->nextStream()) {
print $zip->getHeaderInfo()->{Name}
}
' foo.zip
test/
test/.txt
备注: Python 在其核心库中也有一个 ZipFile
模块。由于 stdout
的编码问题,我没有 post 任何 Python 解决方案。 Python 版本之间的修复不兼容...
我正在编写需要列出 zip 文件中的文件条目的脚本。我的问题是,当有一个带有表情符号的条目时,CLI 没有正确输出文件名:
❯ zip -r foo.zip test/
adding: test/ (stored 0%)
adding: test/.txt (stored 0%)
src on main [!?] is v1.0.0 via v16.14.0
❯ unzip -l foo.zip
Archive: foo.zip
Length Date Time Name
--------- ---------- ----- ----
0 04-08-2022 20:54 test/
0 04-08-2022 20:54 test/�???.txt <---- here is my problem
--------- -------
0 2 files
src on main [!?] is v1.0.0 via v16.14.0
❯ unzip foo.zip test/.txt
Archive: foo.zip
extracting: test/�???.txt
有没有办法告诉 unzip
考虑特殊字符列出文件条目?
谢谢!
使用 unzip
似乎无法准确列出 zip 存档中的文件(使用 unzip 6.00
测试);你必须 select 其他工具。
我在回答中选择了perl
,因为它的核心库中具有所需的功能。这里我使用了 newline
作为分隔符 (-l
),但是如果你希望能够读取和处理输出的路径,你应该用 NULL-BYTE
(-l0
) 替换它100% 准确来自 bash:
perl -l -e '
use IO::Uncompress::Unzip;
$zip = IO::Uncompress::Unzip->new($ARGV[0]);
while($zip->nextStream()) {
print $zip->getHeaderInfo()->{Name}
}
' foo.zip
test/
test/.txt
备注: Python 在其核心库中也有一个 ZipFile
模块。由于 stdout
的编码问题,我没有 post 任何 Python 解决方案。 Python 版本之间的修复不兼容...