Я хочу сделать zip-файл в Windows (7) с помощью ZipOutputStream
. Проблема заключается в том, что имя файла (и содержимое файла) тоже содержит греческие символы («ГП0000660040140521_a.txt
», «Гамма» и «Пи»). Код заархивировать файл я использую:«IllegalArgumentException: UNMAPPABLE [1]» при zip-файле с греческими символами
ZipOutputStream zipOs = new ZipOutputStream(
new FileOutputStream("c:\\temp\\test.zip"), Charset.forName("cp737")
);
File sourceFile = new File("C:/Path/To/File/ГП0000660040140521_b.txt");
String entryName = sourceFile.getName().replaceAll("\\\\", "/");
ZipEntry entry = new ZipEntry(entryName);
zipOs.putNextEntry(entry);
...
...
Но на последней строке (putNextEntry
вызова) Я получаю IllegalArgumentException
:
java.lang.IllegalArgumentException: UNMAPPABLE[1]
at java.util.zip.ZipCoder.getBytes(ZipCoder.java:95)
at java.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:407)
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:221)
Я предполагаю, что там должно быть что-то не так с отображением символов между Греческий и UTF-8 ... Каким образом можно закрепить файл с греческими символами в имени файла?
EDIT
Если я использую «UTF-8», как набор символов, почтовый файл может быть создан, но имя архивного файла является неправильным: «ðôðƒ0000660040140521_a.txt
» (греческие символы отсутствует)
Что делает метод createZipEntry? – agad
@agad: Моя ошибка! Я исправил код. Благодарю. – Steffen
Когда вы говорите, что имя «неправильно», как именно вы это проверяете? Какой инструмент вы используете для проверки ZIP-файла, и уверены ли вы, что этот инструмент использует ту же самую кодировку для интерпретации имен файлов, которые вы использовали при их создании? –