我试图从原始字符串创建一个Zip文件(例如,当您使用编辑器打开一个Zip文件时),我是从API获得的。 我尝试使用Java 8中的Zip-API,但收到“ 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无法处理未知字符并更改它们,但是我该如何更改其行为?
感谢您的答复!
答案 0 :(得分:0)
要从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));
...