Gần đây tôi đã viết thư viện I/O tệp zip có tên là zipzap, nhưng tôi đang gặp khó khăn với việc giải mã chính xác tên tệp mục nhập zip từ các tệp zip tùy ý.Giải mã chính xác các tên tệp mục nhập zip - CP437, UTF-8 hoặc?
Bây giờ, PKWARE spec trạng thái:
D.1 Định dạng ZIP trong lịch sử chỉ được hỗ trợ ban đầu của IBM PC nhân vật mã hóa thiết lập, thường được gọi là IBM Mã Trang 437 ...
D.2 Nếu không đặt mục tiêu chung bit 11, tên tệp và nhận xét phải phù hợp với đối với mã hóa ký tự ZIP gốc. Nếu mục đích chung chút 11 được thiết lập, tên tập tin và bình luận phải hỗ trợ Unicode chuẩn, phiên bản 4.1.0 hoặc lớn hơn bằng cách sử dụng hình thức mã hóa ký tự được định nghĩa bởi UTF-8 lưu trữ đặc điểm kỹ thuật ...
mà có nghĩa là các tệp zip phù hợp mã hóa tên tệp là CP437, trừ khi bit EFS được đặt, trong trường hợp đó tên tệp là UTF-8. Không may là có vẻ như rất nhiều công cụ zip không đặt bit EFS chính xác (ví dụ: Mac CLI, GUI zip) hoặc sử dụng một số mã hóa khác, thường là hệ thống mặc định (ví dụ: WinZip?). Nếu bạn biết WinZip, 7-Zip, Thông tin-Zip, PKZIP, Java JAR/Zip, .NET zip, dotnetzip, vv .. mã hóa tên tệp và những gì họ đặt trường "phiên bản được tạo bởi" thành khi nén, vui lòng nói với tôi.
Đặc biệt, cố gắng Thông tin-Zip này khi giải nén:
- Hệ thống tập tin = MS-DOS (0) => CP437
- trừ: version = 2.5, 2.6, 4.0 = > hệ thống ISO 8859-1
- file = HPFS (6) => CP437
- file hệ thống NTFS = (10) và phiên bản = 5,0 => CP437
- khác, ISO 8859-1
Nếu tôi muốn hỗ trợ kiểm tra hoặc chiết xuất từ các tập tin zip tùy ý và thực hiện một lý nỗ lực mã hóa tên file mà không cờ EFS, những gì tôi có thể nhìn cho?