LinuxでUnicode文字を保持するzipを作成するには?

LinuxでUnicode文字を保持するzipを作成するには?

私は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 Kittの例にうまく従うことzipができました。unzipうん!これは良いニュースです。ただし、Nautilusを使用すると、まだ上記の問題が発生しますright-click -> Extract Here

Nautilusを使用してアーカイブを抽出すると、right-click -> Extract HereUnicode文字は上記のように変更されます。だからノーチラスは使われていないと思いますunzip

zip(コマンドを使用してもNautilusを使用しても、zipを作成する方法は重要ではないようですright-click -> Compress。)

質問は次のとおりです。

ノーチラスのデフォルトの圧縮解除器が私のUnicodeを壊さないようにzipアーカイブを作成する方法はありますか?

(また: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

ベストアンサー1

何もする必要はありません:

$ 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
0000014

Nautilusはアーカイブの抽出には使用されず、次のものが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)最新バージョンがまだこのように機能しているかどうかをテストした後、開いてみることができます。

おすすめ記事