[Zip4j] 압축 파일 안의 파일명 UTF-8 여부 확인 하여 압축 해제 진행 테스트
Windows 환경에서 제공되는 압축 기본 프로그램으로 압축을 진행 하거나 , 공개용 압축 프로그램 기본 설정으로 MSBC (멀티바이트 문자 집합) 으로 압축을 진행 하는 경우에
Java zip4j를 이용하여 기본적으로 압축 해제 시에 Charset을 cp949로 설정해주지 않으면 파일명이 깨지는 것을 확인 할 수 있었습니다.
이를 zip4j에서 제공하는 isFileNameUTF8Encoded() 메서드를 이용하여 UTF-8 로 인코딩 되어있는지 여부를 체크 하고 Charset을 설정 하는 방법을 테스트 하였습니다.
package com.gmission.test.controller;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.ZipFile;
@RestController
@RequestMapping("/test")
@Slf4j
public class ZipTestController {
@GetMapping("/zipExtractTest")
public void zipCompressTest(@RequestParam Map<String,Object> map) throws IOException {
//String filePath = "D:/새 압축-UTF8.zip";
String filePath = "D:/새 압축-cp949.zip";
ZipFile zip2 = new ZipFile(filePath);
log.info("zipCompressTest={}", zip2.getCharset().toString()) ;
log.info("first={}",zip2.getFileHeaders().stream().findFirst().get().isFileNameUTF8Encoded());
if(zip2.getFileHeaders().stream().findFirst().isPresent() &&
!zip2.getFileHeaders().stream().findFirst().get().isFileNameUTF8Encoded()) {
zip2.close();
zip2 = new ZipFile(filePath);
zip2.setCharset(Charset.forName("cp949"));
log.info("zip2.setCharset={}" , zip2.getCharset());
}
zip2.getFileHeaders().forEach(a -> {
log.info("a.isFileNameUTF8Encoded()={}",a.isFileNameUTF8Encoded());
log.info("Filename={}",a.getFileName());
});
//zip2.extractAll("D:/새 압축");
}
}
결과 1. MBCS 으로 압축되어 있는 파일명일 경우
결과 2. UTF-8 으로 압축되어 있는 파일명일 경우
'JAVA' 카테고리의 다른 글
[SpringBoot] Windows Eclipse lombok @Slf4j Annotation 사용 시 log. 으로 접근 되지 않을 시에 해결 방안 (0) | 2024.06.10 |
---|---|
[Java stream] anyMatch를 이용한 list 간의 join 진행 테스트 (0) | 2024.05.21 |
[SpringBoot] Eclipse를 이용한 Spring Starter Project 생성 후 실행 시에 기본 로그인 페이지 제거 하기 (0) | 2024.05.20 |
[JAVA] ArrayList Stream 이용 , string join 예제 입니다. (0) | 2024.05.06 |
[ASP.NET,SpringBoot] WAS에서 파일 다운로드 처리 시에 한글 깨짐 조치 방안 (1) | 2024.03.12 |