Study/Java

java file download 한글 깨짐 현상 해결

LoonyHyun 2014. 3. 12. 13:50
반응형

출처 : http://blog.daum.net/mystarlight/8925400 , 

http://blog.naver.com/moonhi81?Redirect=Log&logNo=130180684523


IE 11 이 추가되면서 "MSIE" 가 IE에서 빠져버렸다.

IE 11 의 user agent 는 아래와 같다.


Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; NP06; rv:11.0) like Gecko



IE 10 의 user agent


Mozilla/5.0 (Compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)



위 처럼 바뀌어서 Trident 로 찾아 rv 로 버전을 확인하면 되겠다.


etc.

크롬의 user agent


Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36




public void setHeader(HttpServletRequest request,
   HttpServletResponse response, File file, String fileName)
   throws ServletException, IOException {
  String mime = request.getSession().getServletContext().getMimeType(file.getName());

  if (mime == null || mime.length() == 0) {
   //mime = "application/octet-stream;charset=euc-kr";
   //Header Mime 추가
   mime = "application/octet-stream;charset=euc-kr";
  }

  
  response.setContentType(mime);
  

  String userAgent = request.getHeader("User-Agent");

  if (userAgent.indexOf("MSIE 5.5") > -1) { // MS IE 5.5 이하
   response.setHeader("Content-Disposition", "filename="
     + URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+",
       "\\ ") + ";");
  } else if (userAgent.indexOf("MSIE") > -1) { // MS IE (보통은 6.x 이상 가정)
   response.setHeader("Content-Disposition", "attachment; filename="
     + java.net.URLEncoder.encode(fileName, "UTF-8").replaceAll(
       "\\+", "\\ ") + ";");
  } else if (userAgent.indexOf("Trident") > -1) { //MS IE 11

   response.setHeader("Content-Disposition", "attachment; filename="
     + java.net.URLEncoder.encode(fileName, "UTF-8").replaceAll(
       "\\+", "\\ ") + ";");

  } else { // 모질라나 오페라
   response.setHeader("Content-Disposition", "attachment; filename="
     + new String(fileName.getBytes(CHARSET), "latin1")
       .replaceAll("\\+", "\\ ") + ";");
  }
  if (file.length() > 0) {
   response.setHeader("Content-Length", "" + file.length());
  }

 

  if (file.length() > 0) {
   response.setHeader("Content-Length", "" + file.length());
  }
 }