Как создать Zip-файл из Raw-Data из Http-запроса? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь создать Zip-файл из Raw-String (например, когда вы открываете Zip-файл в редакторе), который я получаю из API. Я пытался использовать Zip-API из Java 8, но я получаю «java.util.zip.ZipException: слишком много символов длины или расстояния» - ошибка.

        ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes());
        ZipInputStream zis = new ZipInputStream(bis);

        FileOutputStream fos = new FileOutputStream("C:\\Users\\Desktop\\ArchiveTest.zip");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        ZipOutputStream zos = new ZipOutputStream(bos);

        ZipEntry currentEntry;
        byte[] buffer = new byte[8192];
        while ((currentEntry = zis.getNextEntry()) != null) {
            ZipEntry newEntry = new ZipEntry(currentEntry.getName());
            zos.putNextEntry(newEntry);
            int length;
            while ((length = zis.read(buffer)) > 0) {
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();                   
        }

        zos.close();

Я предполагаю, что Java не может обработать неизвестные символы и изменить их, но как я могу изменить это поведение?

Спасибо за любые ответы!

1 Ответ

0 голосов
/ 21 мая 2019

Чтобы получить байты из String, нужно (всегда) указывать кодировку, например String s = "äüö"; byte[] bytes = s.getBytes("UTF-8"); или даже лучше ...; byte[] bytes = s.getBytes(StandardCharsets.UTF_8);

Здесь следует использовать следующее (если кодировка сайта "UTF-8""):

InputStream bis = new java.io.ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8));
...
...