如何强制解压缩列表使用 unicode UTF-8

如何强制解压缩列表使用 unicode UTF-8

压缩

zip -r --symlinks ../a.zip a a.txt 
  adding: a/šáčžřŠÁČÝŘŽÚ§/ (stored 0%)

文件名以 unicode 格式正确存储。

列表

unzip -l ../a.zip 
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  03-11-2021 14:40   a/s??a??c??z??r??S??A??C??Y??R??Z??U??§/

unzip list 打印蹩脚的字符。

文件名以 unicode 正确存储在 zip 中,因为解压缩可以正确恢复它们,但我需要以正确的 unicode 字符显示 zip 列表。

如何以正确的 unicode 打印列表?这和 shell 设置有关系吗?

语言环境

LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

我的是MacOS系统。

尝试了所有这些,仍然是相同的结果:-(

LC_ALL=UTF-8 zip...
LC_ALL=UTF-8 unzip...

LANG =UTF-8 zip...
LANG =UTF-8 unzip...

我还尝试了所有语言变体:

LANG=cs_CZ.UTF-8 unzip -l ../unzip.zip
LANG=en_US.UTF-8 unzip -l ../unzip.zip

所有这些语言变体均已列出locale -a,但仍会产生无效输出:-(

bsdtar无需任何区域设置即可正常工作。

bsdtar tvvf ../unzip.zip 
drwxr-xr-x  0 501    20          0 Mar 11 14:40 a/šáčžřŠÁČÝŘŽÚ§/
Archive Format: ZIP 1.0 (uncompressed),  Compression: none

答案1

它应该与

LANG=en_US.UTF-8 unzip -l a.zip

UTF-8 不是 LANG 的有效值。要列出可用的区域设置,请尝试

locale -a

如果en_US.UTF-8此处未列出,请尝试列出并以 UTF-8 结尾的其中之一。

我在 Ubuntu 系统上尝试过这个,但我相信这也应该适用于 Mac 操作系统。我还验证了在按照您的区域设置中当前设置或按照注释中的建议进行
设置时,我得到了与您类似的有问题的输出。LANG=""LANG=UTF-8

相关内容