저는 데비안을 사용하고 있습니다. 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
이것은 내가 원하는 것이 아닙니다. 원본 유니코드 코드 포인트를 보존하는 방법은 무엇입니까?
편집: 아래 Stephen Kitt의 예를 성공적으로 zip
따를 수 있었습니다 . unzip
응! 이것은 좋은 소식입니다. 그러나 Nautilus를 사용할 때 여전히 위와 같은 문제가 발생합니다 right-click -> Extract Here
.
Nautilus를 사용하여 아카이브를 추출하면 right-click -> Extract Here
유니코드 문자가 위에서 설명한 대로 변경됩니다. 그래서 노틸러스는 사용되지 않는 것 같아요 unzip
.
zip
(명령을 사용하든 Nautilus를 사용하든 zip을 만드는 방법은 중요하지 않은 것 같습니다 right-click -> Compress
.)
질문은 다음과 같습니다.
노틸러스의 기본 압축 해제기가 내 유니코드를 손상시키지 않도록 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
노틸러스는 아카이브를 추출하는 데 사용되지 않고 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
) 최신 버전이 여전히 이런 방식으로 작동하는지 테스트한 후 열어볼 수 있습니다.