Tôi có một phương pháp mà thêm InputStream để zip như là một mục:Làm thế nào để thêm mục zip với utf-8 tên để zip
private void addToZip(InputStream is, String filename) throws Exception {
try {
ZipEntry zipEntry = new ZipEntry(filename);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
} finally {
IOUtils.closeQuietly(is);
}
}
Vấn đề xảy ra khi tên tập tin chứa một char UTF-8 như AE. .. Trong tệp zip, nó sẽ được lưu dưới dạng ?????
và khi tôi giải nén nó trong ubuntu 12.10, có vẻ như: N├бstroje
thay vì Nástroje
.
Ví dụ này tôi sử dụng jdk6 nhưng JDK7 bây giờ tôi cũng đã cố gắng:
zos = new ZipOutputStream(fos, Charset.forName("UTF-8"));
Nhưng không thành công.
Tôi cũng đã thử Apache Commons Zip và đặt mã hóa nhưng cũng không thành công.
Vậy làm cách nào tôi có thể thêm tệp này bằng các ký hiệu unicode trong tên tệp thành zip?
Tôi đã gặp sự cố tương tự một thời gian trước đây. Tôi đã sử dụng bảng mã không phải Unicode, cụ thể cho ngôn ngữ địa phương (Cp866). Và nó hoạt động tốt. –
vì vậy thay vì Nástroje tôi nên lưu mục nhập là Nastroje? Đây là lựa chọn cuối cùng ... cách bạn chuyển đổi nó? – hudi
Ứng dụng đó được dự định chạy trong hệ thống Windows. Và tôi đã sử dụng mã hóa 'Cp866', để hỗ trợ các ký tự tiếng Nga trong tên tệp trong lưu trữ zip và xem chúng một cách chính xác khi tôi xem nội dung tệp nén. Va no đa hoạt động. Có bộ ký tự không phải unicode, có hỗ trợ các ký hiệu ngôn ngữ của bạn không? Hãy thử sử dụng nó, thay vì utf-8. –