我在查Debian。我有一个名为Sóanr.jpg的文件。根据https://emojidissector.com/,这是由以下代码点组成的:
S 0053 LATIN CAPITAL LETTER S
o 006F LATIN SMALL LETTER O
́ 0301 COMBINING ACUTE ACCENT
a 0061 LATIN SMALL LETTER A
n 006E LATIN SMALL LETTER N
r 0072 LATIN SMALL LETTER R当我创建这个文件的zip,然后解压缩它时,拉丁文小写字母O和组合的尖锐重音被组合成一个新的代码点:
S 0053 LATIN CAPITAL LETTER S
ó 00F3 LATIN SMALL LETTER O WITH ACUTE
a 0061 LATIN SMALL LETTER A
n 006E LATIN SMALL LETTER N
r 0072 LATIN SMALL LETTER R这不是我想要的。如何保存原始unicode代码点?
编辑:我成功地遵循了Stephen下面的示例,成功地实现了zip和unzip。耶!这是个好消息。然而,在使用Nautilus right-click -> Extract Here时,我仍然存在上述问题。
如果我使用Nautilus right-click -> Extract Here解压缩我的归档文件,那么我的unicode字符就会像上面所描述的那样发生变化。所以我想Nautilus没有使用unzip。
(我创建zip的方式似乎并不重要--无论是使用zip命令还是使用Nautilus的right-click -> Compress。)
问题是:
有没有办法创建一个压缩存档,这样Nautilus的默认解压缩程序就不会破坏我的独角兽?
(还有:我如何才能弄清楚Nautilus使用什么程序来使用Extract Here?)
在zip之前:
$ ls S* | od -a -t x1
0000000 S o L soh a n r . z i p nl
53 6f cc 81 61 6e 72 2e 7a 69 70 0a在right-click -> Extract Here之后:
$ ls S* | od -a -t x1
0000000 S C 3 a n r . j p g nl
53 c3 b3 61 6e 72 2e 6a 70 67 0a发布于 2023-02-02 11:32:25
你不需要做任何事
$ touch So<0301>anr.jpg
$ ls So* | od -a -t x1
0000000 S o L soh a n r . j p g nl
53 6f cc 81 61 6e 72 2e 6a 70 67 0a
0000014
$ zip -9 unitest.zip So*
adding: Sóanr.jpg (stored 0%)
$ unzip -v unitest.zip | grep Stored | od -a -t x1
0000000 sp sp sp sp sp sp sp 0 sp sp S t o r e d
20 20 20 20 20 20 20 30 20 20 53 74 6f 72 65 64
0000020 sp sp sp sp sp sp sp sp 0 sp sp sp 0 % sp 0
20 20 20 20 20 20 20 20 30 20 20 20 30 25 20 30
0000040 2 - 0 2 - 2 0 2 3 sp 1 2 : 2 6 sp
32 2d 30 32 2d 32 30 32 33 20 31 32 3a 32 36 20
0000060 0 0 0 0 0 0 0 0 sp sp S o L soh a n
30 30 30 30 30 30 30 30 20 20 53 6f cc 81 61 6e
0000100 r . j p g nl
72 2e 6a 70 67 0a
0000106这表明文件名是在创建时存储的。提取该文件将保留名称:
$ rm So*
$ unzip unitest.zip
Archive: unitest.zip
extracting: Sóanr.jpg
$ ls So* | od -a -t x1
0000000 S o L soh a n r . j p g nl
53 6f cc 81 61 6e 72 2e 6a 70 67 0a
0000014Nautilus不使用unzip提取档案,而是使用藤黄。其他使用libarchive的工具也有同样的问题:
$ bsdtar -tf unitest.zip | od -a -t x1
0000000 S C 3 a n r . j p g nl
53 c3 b3 61 6e 72 2e 6a 70 67 0a
0000013我没有看到任何针对libarchive的相关缺陷 (参见ldd /usr/bin/nautilus的输出),在测试最新版本是否仍然以这种方式运行之后,您可能希望打开一个。
https://unix.stackexchange.com/questions/734057
复制相似问题