Chỉnh sửa: OK. Câu hỏi thông báo đã được cập nhật để bạn không nhận được v0.1 mà là v1.0. không áp dụng nữa.
Phiên bản không phải là "khả năng" của tệp như thế nào mà là phiên bản tối thiểu được yêu cầu để trích xuất tệp đó từ trong kho lưu trữ.
Đây không phải là phiên bản tổng thể cho kho lưu trữ!
Một điểm khác biệt ở đây là ví dụ: thẻ OO tất cả các tệp có cùng yêu cầu phiên bản. Đến lượt nó là tệp trong tài liệu (lưu trữ trên tất cả) với yêu cầu cao nhất.
Đó là. Mỗi tệp có một tiêu đề zip chỉ định phiên bản tối thiểu cần thiết để giải nén nó. Ở trên, chúng ta thường có:
archive-files PackType Zip-Required OO-Header `zip`-header
+--------------------------------------------------------------+
| mimetype Store 1.0 2.0 1.0 |__ foo.odt
| content.xml Deflate 2.0 2.0 2.0 |
+---------------------------------------------------------------+
Vì vậy, OO đặt cờ yêu cầu thành 2.0 mặc dù là 1.0. Tuy nhiên, điều này không ảnh hưởng đến khả năng mở tài liệu. (Bạn có thể mở tệp được nén bằng tay trong OO mặc dù mimetype
được gắn thẻ v1.0).
Phiên bản
foo.odt:
1400 Version needed to extract.
0008 General Purpose
0000 Compression method
Phiên bản cần thiết để trích xuất , ở đây là byte thấp hơn 0x14
, được dịch bằng cách chia và mô đun cho 10:
Major: 0x14 / 0x0a = 2
Minor: 0x14 % 0x0a = 0
Phiên bản Aka 2.0
Byte cao hơn 0x00
cho biết tập tin tương thích với cái gì Nếu bằng 0, thì nó tương thích với MS-DOS (FAT, FAT32, VFAT). Khác nó được chỉ định bởi một ánh xạ. Ví dụ: nếu tôi sử dụng zip
mà không có tùy chọn nào trên hệ thống của mình, tôi sẽ nhận được thông 0x03
báo Unix. 0x0a
là NTFS, v.v.
Phiên bản 2.0 cho biết: (4.4.3.2 Phiên bản tính năng tối thiểu hiện tại)
* File is a folder (directory)
* File is compressed using Deflate compression
* File is encrypted using traditional PKWARE encryption
Trong tệp zip của bạn, bạn có:
bar.odt:
0a00 Version needed to extract.
0000 General Purpose
0000 Compression method
Major: 0x0a / 0x0a = 1
Minor: 0x0a % 0x0a = 0
Phiên bản Aka 1.0
Phiên bản 1.0 chỉ đơn giản là giá trị mặc định.
Phân cấp tệp và phiên bản tối thiểu
Lý do bạn thấy phiên bản 1.0
bên dưới Phiên bản cần trích xuất - đó là những gì bạn thực sự thấy là tiêu đề zip cho tệp mimetype
. Tập tin này không bị xì hơi nhưng được lưu trữ mà không nén. Do đó, bạn chỉ cần phiên bản 1.0
để giải nén tập tin đó. Tuy nhiên, đây không phải là phiên bản tổng thể của kho lưu trữ. Nếu bạn nhìn xuống dưới, bạn sẽ tìm thấy phiên bản 2.0 ngay khi bạn tìm thấy một tệp được lưu với độ lệch. Bạn có thể kiểm tra bằng cách:
hexdump -v -e '/1 "%02x "' bar.odt | grep -o '50 4b 03 04 .\{6\}'
Nên cung cấp cho bạn một cái gì đó như
50 4b 03 04 0a 00
50 4b 03 04 0a 00
...
50 4b 03 04 14 00
50 4b 03 04 14 00
50 4b 03 04 0a 00
50 4b 03 04 14 00
...
Tiêu đề tập tin thư mục trung tâm
Có một số tập tin với một tiêu đề mở rộng. Bạn có thể liệt kê những thứ này bằng cách:
hexdump -v -e '/1 "%02x "' foo.odt | grep -o '50 4b 01 02.\{16\}'
(Hãy nhớ rằng để đảo ngược 50 4b ...
để 02 01 4b 50
nếu hexdump -n 4 foo.odt nói như vậy)
Bằng cách này, bạn sẽ nhận được thông thường:
____________ Version required (2.0)
| |
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 08
|___|
|
+-------------- Version supported by packing application. v2.0
Trên zip
tệp đã tạo, bạn có thể nhận được ví dụ:
____________ Version required for this file (2.0)
| |
50 4b 01 02 1e 03 14 00 00
|___|
|
+-------------- Version supported by packing
application. v3.0
Mục đích chung (và cờ khác được đặt trong tệp odt)
Đây là một lá cờ bit. Vì tệp của bạn là big-endian / Motorola, cờ trở thành:
0x0800 = 0000 1000 0000 0000
|
+---------------- 11 => File names and comments MUST be
stored as Utf-8.
Ít nhất LibreScript tiết kiệm hơn nữa với các mod khác nhau.
mimetype
luôn luôn là đầu tiên và không nên được nén. Điều này là để giúp phần mềm khác nhau để xác định các tập tin và nội dung của nó. Bằng cách này, người ta có thể ví dụ:
$ hexdump -C -s 38 -n 39 foo.odt
00000026 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64 2e |application/vnd.|
00000036 6f 61 73 69 73 2e 6f 70 65 6e 64 6f 63 75 6d 65 |oasis.opendocume|
00000046 6e 74 2e 74 65 78 74 |nt.text|
Mặc dù zip
thường lưu tất cả các thư mục, OO chỉ lưu một thư mục nếu nó trống. Như vậy:
khóa kéo:
Thumbnails/
Thumbnails/thumbnail.png
META-INF/
META-INF/manifest.xml
oo:
Thumbnails/thumbnail.png
META-INF/manifest.xml
Và như thế ...