본문 바로가기
Back-end/JAVA & Spring

[JAVA]브라우저별 한글 파일명 인코딩 _ excel파일

by 꼬바리 2022. 4. 19.

서버에서 프론트로 파일을 전송할 때 한글로 파일명을 보내면 깨지는 경우가 다반사입니다.

 

따라서 아래 로직과 같이 User-Agent header 값을 가져와서 브라우저 별로 인코딩을 해 줘야 한글이 깨지지 않고 정상 출력이 됩니다.

 

 

String fileName = "한글파일명";

String name = "출력될파명이름";

// 브라우저 별 한글 인코딩
String header = request.getHeader("User-Agent");
if (header.contains("Edge")){
    name = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
    response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\".xlsx;");
} else if (header.contains("MSIE") || header.contains("Trident")) { // IE 11버전부터 Trident로 변경되었기때문에 추가해준다.
    name = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
    response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xlsx;");
} else if (header.contains("Chrome")) {
    name = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + name + "\".xlsx");
} else if (header.contains("Opera")) {
    name = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + name + "\".xlsx");
} else if (header.contains("Firefox")) {
    name = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
    response.setHeader("Content-Disposition", "attachment; filename=" + name + ".xlsx");
}
}
728x90
반응형

댓글