2011-02-15 34 views
6

Tôi đang sử dụng lớp ZipArchive php để tạo tệp nén zip. Tôi sử dụng tham số thứ hai của phương thức addFile để thiết lập tên của tệp trong kho lưu trữ (vì tệp thực trên đĩa có tên khác). Một số tên phải có dấu tiếng Pháp (chẳng hạn như & eacute;). Khi tôi tải xuống tệp lưu trữ, các dấu trọng âm không được hiển thị chính xác trong tên tệp. Tôi nên sử dụng mã hóa nào cho tên tệp? (ứng dụng sử dụng UTF-8)ZipArchive sử dụng mã hóa nào để lưu trữ tên tệp trong kho lưu trữ đã tạo?

+0

Zip là một định dạng khá cũ, và xảy ra trước Unicode. Các phiên bản trước năm 2007 của định dạng nhiều khả năng chỉ sử dụng ascii mở rộng tiêu chuẩn. Sau '07, thông số mới cho phép UTF-8. Kiểm tra phiên bản tệp bạn đang tạo. –

Trả lời

2

Tệp zip không có mã hóa được chỉ định; công cụ lưu trữ phải đoán (hoặc giả định) mã hóa được sử dụng. Hãy thử CP1252 trước, sau đó đi từ đó.

+1

Không hoạt động. Tôi đã thử ISO-8859-1, CP1252 và CP850 mà không thành công – matei

+0

Trình tự byte của tên tệp trông như thế nào và văn bản được cho là gì? –

4

Sử dụng mã hóa DOS. Tên tệp của tôi có các ký tự cyrillic, vì vậy tôi mã hóa tên tệp từ cp1251 (Windows) thành cp866 (DOS), khi chuyển tên tệp thành $zip->addFile().

+0

Cảm ơn một nhóm! Làm thế nào bạn đã tìm ra chính xác những gì mã hóa để sử dụng? – YakovL

9

Đó là lỗi php # 53948, xem official bug report.

workaround đề nghị (làm việc cho tôi):

$zip->addFile($file, iconv("UTF-8", "CP852", $local_name)); 
Các vấn đề liên quan