request정보중 Header정보를 가져와
User-Agent정보에 대하여 브라우저별로 구분하고
최종적으로 인코딩을 브라우저 별로 설정해주면 한글깨짐문제를 해결할 수 있다.
/**
* @brief 브라우저 판별 메서드
* @author 이경재(kjlee0118@hyosung.com)
* @param request
* @return
*/
public static String getBrowser(HttpServletRequest request) {
String header = request.getHeader("User-Agent");
if ( header.indexOf("MSIE") > -1) {
return "MSIE";
} 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";
}
/**
* @brief 브라우저별 인코딩 변환
* @author 이경재(kjlee0118@hyosung.com)
* @param request
* @param fileName
* @return
*/
public static String getDownFileNames(HttpServletRequest request,String fileName)
{
String browser = getBrowser(request);
if ( fileName == null || fileName.equals("") ) {
fileName = "UnKnownFileName";
}
String resultName = "";
try{
// Explorer
if ( browser.indexOf("MSIE") != -1 ) {
resultName = new String( fileName.getBytes("EUC-KR"), "ISO-8859-1").replaceAll(" ","%20");
}
// Opera
else if ( browser.indexOf("Opera") != -1 ) {
resultName = new String( fileName.getBytes("UTF-8"), "ISO-8859-1");
}
// Chrome
else if ( browser.indexOf("Chrome") != -1 ) {
resultName = new String( fileName.getBytes("EUC-KR"), "ISO-8859-1")
}
// Safari
else if ( browser.indexOf("Safari") != -1 ) {
resultName = new String( fileName.getBytes("UTF-8"), "ISO-8859-1");
}
// FireFox
else if ( browser.indexOf("Firefox") != -1 ) {
resultName = new String( fileName.getBytes("UTF-8"), "ISO-8859-1");
}
// Other
else{
resultName = new String( fileName.getBytes("EUC-KR"), "ISO-8859-1")
}
} catch (Exception ex) {
resultName = fileName;
}
return resultName;
}