我尝试使用以下java代码打开一个zip文件:
private Task<List<RestCanvas>> fetchCanvases = new MyTask(getCanvasForGroupAccount + groupAccount.getGroupId());
// ...
// please don't use this name :)
private static class MyTask extends Task<List<RestCanvas>> {
private final String id;
public MyTask(String id) {
this.id = id;
}
@Override
protected List<RestCanvas> call() throws Exception {
List<RestCanvas> list = new ArrayList<>();
try{
for(RestGroupAccount groupAccount : groupAccounts) {
RestTemplate rest = StaticRestTemplate.getRest();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + StaticRestTemplate.jsessionid);
HttpEntity<RestCanvas> requestEntity = new HttpEntity<>(requestHeaders);
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<RestCanvas[]> responseEntity = rest.exchange(id, HttpMethod.GET, requestEntity, RestCanvas[].class);
RestCanvas[] restCanvasArray = responseEntity.getBody();
Collections.addAll(list, restCanvasArray);
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
}
给了我
ZipFile zipFile = new ZipFile("C:\\test.zip");
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
System.out.println(entry.getName());
}
zipFile.close();
当读取包含使用7-zip创建的德语“Umlaute”(ä,ü,ö...)文件的zip文件时。由于Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:531)
at java.util.zip.ZipFile.access$900(ZipFile.java:56)
at java.util.zip.ZipFile$1.nextElement(ZipFile.java:513)
at java.util.zip.ZipFile$1.nextElement(ZipFile.java:483)
使用的默认编码是UTF-8。
因此,我试图在GUI中压缩文件时找出7-zip(Windows 7,64位)使用的编码。显然它不是UTF-8 ..