response 객체 한글깨짐 처리
금감원에서 테스트했던거 이번 재단에도 한글깨짐 처리 먹히넹
/**
* 다운로드시 한글 깨짐 방지 처리
*/
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {
String browser = getBrowser(request);
String dispositionPrefix = "attachment; filename=";
String encodedFilename = null;
System.out.println("================================="+browser+"=============================");
if (browser.equals("MSIE")) {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Firefox")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
encodedFilename =
URLDecoder.decode(encodedFilename);
} else if (browser.equals("Opera")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Chrome")) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < filename.length(); i++) {
char c = filename.charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
encodedFilename = sb.toString();
} else if (browser.equals("Safari")){
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1")+ "\"";
encodedFilename =
URLDecoder.decode(encodedFilename);
}
else {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1")+ "\"";
//
// LOGGER.info("====8859-1=====");
// LOGGER.info(new String( filename.getBytes( "8859_1"), "KSC5601"));
// LOGGER.info(new String( filename.getBytes( "8859_1"), "EUC-KR"));
// LOGGER.info(new String( filename.getBytes( "8859_1"), "UTF-8"));
// LOGGER.info("====KSC5601=====");
// LOGGER.info(new String( filename.getBytes( "KSC5601"), "8859_1"));
// LOGGER.info(new String( filename.getBytes( "KSC5601"), "EUC-KR"));
// LOGGER.info(new String( filename.getBytes( "KSC5601"), "UTF-8"));
// LOGGER.info("====EUC-KR=====");
// LOGGER.info(new String( filename.getBytes( "EUC-KR"), "8859_1"));
// LOGGER.info(new String( filename.getBytes( "EUC-KR"), "KSC5601"));
// LOGGER.info(new String( filename.getBytes( "EUC-KR"), "UTF-8"));
// LOGGER.info("====UTF-8=====");
// LOGGER.info(new String( filename.getBytes( "UTF-8"), "KSC5601"));
// LOGGER.info(new String( filename.getBytes( "UTF-8"), "8859_1"));
// LOGGER.info(new String( filename.getBytes( "UTF-8"), "EUC-KR"));
}
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
if ("Opera".equals(browser)){
response.setContentType("application/octet-stream;charset=UTF-8");
}
}
브라우저 정보 받아오기 메서드
public String getBrowser(HttpServletRequest request) {
String header = request.getHeader("User-Agent");
if (header.indexOf("MSIE") > -1) {
return "MSIE";
} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
return "Trident";
} else if (header.indexOf("Chrome") > -1) {
return "Chrome";
} else if (header.indexOf("Opera") > -1) {
return "Opera";
} else if (header.indexOf("Safari") > -1) {
return "Safari";
}
return "Firefox";
}